Skip to content

Commit

Permalink
feat: continue-activity event is extended to support webpageURL prope…
Browse files Browse the repository at this point in the history
…rty (#30042)

Co-authored-by: Akshat Malik <amalik@microstrategy.com>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
  • Loading branch information
3 people committed Jul 13, 2021
1 parent 3582a51 commit d267f97
Show file tree
Hide file tree
Showing 7 changed files with 18 additions and 8 deletions.
2 changes: 2 additions & 0 deletions docs/api/app.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@ Returns:
[`NSUserActivity.activityType`][activity-type].
* `userInfo` unknown - Contains app-specific state stored by the activity on
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
to be resumed. You should call `event.preventDefault()` if you want to handle
Expand Down
5 changes: 3 additions & 2 deletions shell/browser/api/electron_api_app.cc
Original file line number Diff line number Diff line change
Expand Up @@ -716,8 +716,9 @@ void App::OnDidFailToContinueUserActivity(const std::string& type,

void App::OnContinueUserActivity(bool* prevent_default,
const std::string& type,
const base::DictionaryValue& user_info) {
if (Emit("continue-activity", type, user_info)) {
const base::DictionaryValue& user_info,
const base::DictionaryValue& details) {
if (Emit("continue-activity", type, user_info, details)) {
*prevent_default = true;
}
}
Expand Down
3 changes: 2 additions & 1 deletion shell/browser/api/electron_api_app.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,8 @@ class App : public ElectronBrowserClient::Delegate,
const std::string& error) override;
void OnContinueUserActivity(bool* prevent_default,
const std::string& type,
const base::DictionaryValue& user_info) override;
const base::DictionaryValue& user_info,
const base::DictionaryValue& details) override;
void OnUserActivityWasContinued(
const std::string& type,
const base::DictionaryValue& user_info) override;
Expand Down
3 changes: 2 additions & 1 deletion shell/browser/browser.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,8 @@ class Browser : public WindowListObserver {

// Resumes an activity via hand-off.
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.
void UserActivityWasContinued(const std::string& type,
Expand Down
5 changes: 3 additions & 2 deletions shell/browser/browser_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,11 @@
}

bool Browser::ContinueUserActivity(const std::string& type,
base::DictionaryValue user_info) {
base::DictionaryValue user_info,
base::DictionaryValue details) {
bool prevent_default = false;
for (BrowserObserver& observer : observers_)
observer.OnContinueUserActivity(&prevent_default, type, user_info);
observer.OnContinueUserActivity(&prevent_default, type, user_info, details);
return prevent_default;
}

Expand Down
3 changes: 2 additions & 1 deletion shell/browser/browser_observer.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ class BrowserObserver : public base::CheckedObserver {
// The browser wants to resume a user activity via handoff. (macOS only)
virtual void OnContinueUserActivity(bool* prevent_default,
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)
virtual void OnUserActivityWasContinued(
const std::string& type,
Expand Down
5 changes: 4 additions & 1 deletion shell/browser/mac/electron_application_delegate.mm
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,16 @@ - (BOOL)application:(NSApplication*)sender
#endif
restorationHandler {
std::string activity_type(base::SysNSStringToUTF8(userActivity.activityType));
NSURL* url = userActivity.webpageURL;
NSDictionary* details = url ? @{@"webpageURL" : [url absoluteString]} : @{};
if (!userActivity.userInfo)
return NO;

electron::Browser* browser = electron::Browser::Get();
return browser->ContinueUserActivity(
activity_type,
electron::NSDictionaryToDictionaryValue(userActivity.userInfo))
electron::NSDictionaryToDictionaryValue(userActivity.userInfo),
electron::NSDictionaryToDictionaryValue(details))
? YES
: NO;
}
Expand Down

0 comments on commit d267f97

Please sign in to comment.