feat: continue-activity event is extended to support webpageURL property (#30042)

Co-authored-by: Akshat Malik <amalik@microstrategy.com>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
This commit is contained in:
1akshat1 2021-07-13 16:21:33 -04:00 committed by GitHub
parent 3582a513ca
commit d267f979b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 18 additions and 8 deletions

View file

@ -161,6 +161,8 @@ Returns:
[`NSUserActivity.activityType`][activity-type]. [`NSUserActivity.activityType`][activity-type].
* `userInfo` unknown - Contains app-specific state stored by the activity on * `userInfo` unknown - Contains app-specific state stored by the activity on
another device. another device.
* `details` Object
* `webpageURL` String (optional) - A string identifying the URL of the webpage accessed by the activity on another device, if available.
Emitted during [Handoff][handoff] when an activity from a different device wants Emitted during [Handoff][handoff] when an activity from a different device wants
to be resumed. You should call `event.preventDefault()` if you want to handle to be resumed. You should call `event.preventDefault()` if you want to handle

View file

@ -716,8 +716,9 @@ void App::OnDidFailToContinueUserActivity(const std::string& type,
void App::OnContinueUserActivity(bool* prevent_default, void App::OnContinueUserActivity(bool* prevent_default,
const std::string& type, const std::string& type,
const base::DictionaryValue& user_info) { const base::DictionaryValue& user_info,
if (Emit("continue-activity", type, user_info)) { const base::DictionaryValue& details) {
if (Emit("continue-activity", type, user_info, details)) {
*prevent_default = true; *prevent_default = true;
} }
} }

View file

@ -102,7 +102,8 @@ class App : public ElectronBrowserClient::Delegate,
const std::string& error) override; const std::string& error) override;
void OnContinueUserActivity(bool* prevent_default, void OnContinueUserActivity(bool* prevent_default,
const std::string& type, const std::string& type,
const base::DictionaryValue& user_info) override; const base::DictionaryValue& user_info,
const base::DictionaryValue& details) override;
void OnUserActivityWasContinued( void OnUserActivityWasContinued(
const std::string& type, const std::string& type,
const base::DictionaryValue& user_info) override; const base::DictionaryValue& user_info) override;

View file

@ -187,7 +187,8 @@ class Browser : public WindowListObserver {
// Resumes an activity via hand-off. // Resumes an activity via hand-off.
bool ContinueUserActivity(const std::string& type, bool ContinueUserActivity(const std::string& type,
base::DictionaryValue user_info); base::DictionaryValue user_info,
base::DictionaryValue details);
// Indicates that an activity was continued on another device. // Indicates that an activity was continued on another device.
void UserActivityWasContinued(const std::string& type, void UserActivityWasContinued(const std::string& type,

View file

@ -277,10 +277,11 @@ void Browser::DidFailToContinueUserActivity(const std::string& type,
} }
bool Browser::ContinueUserActivity(const std::string& type, bool Browser::ContinueUserActivity(const std::string& type,
base::DictionaryValue user_info) { base::DictionaryValue user_info,
base::DictionaryValue details) {
bool prevent_default = false; bool prevent_default = false;
for (BrowserObserver& observer : observers_) for (BrowserObserver& observer : observers_)
observer.OnContinueUserActivity(&prevent_default, type, user_info); observer.OnContinueUserActivity(&prevent_default, type, user_info, details);
return prevent_default; return prevent_default;
} }

View file

@ -70,7 +70,8 @@ class BrowserObserver : public base::CheckedObserver {
// The browser wants to resume a user activity via handoff. (macOS only) // The browser wants to resume a user activity via handoff. (macOS only)
virtual void OnContinueUserActivity(bool* prevent_default, virtual void OnContinueUserActivity(bool* prevent_default,
const std::string& type, const std::string& type,
const base::DictionaryValue& user_info) {} const base::DictionaryValue& user_info,
const base::DictionaryValue& details) {}
// The browser wants to notify that an user activity was resumed. (macOS only) // The browser wants to notify that an user activity was resumed. (macOS only)
virtual void OnUserActivityWasContinued( virtual void OnUserActivityWasContinued(
const std::string& type, const std::string& type,

View file

@ -154,13 +154,16 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
#endif #endif
restorationHandler { restorationHandler {
std::string activity_type(base::SysNSStringToUTF8(userActivity.activityType)); std::string activity_type(base::SysNSStringToUTF8(userActivity.activityType));
NSURL* url = userActivity.webpageURL;
NSDictionary* details = url ? @{@"webpageURL" : [url absoluteString]} : @{};
if (!userActivity.userInfo) if (!userActivity.userInfo)
return NO; return NO;
electron::Browser* browser = electron::Browser::Get(); electron::Browser* browser = electron::Browser::Get();
return browser->ContinueUserActivity( return browser->ContinueUserActivity(
activity_type, activity_type,
electron::NSDictionaryToDictionaryValue(userActivity.userInfo)) electron::NSDictionaryToDictionaryValue(userActivity.userInfo),
electron::NSDictionaryToDictionaryValue(details))
? YES ? YES
: NO; : NO;
} }