1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #import <Cocoa/Cocoa.h>
7 #include "nsMacUserActivityUpdater.h"
9 #include "nsCocoaUtils.h"
10 #include "nsIBaseWindow.h"
11 #include "gfxPlatform.h"
13 NS_IMPL_ISUPPORTS(nsMacUserActivityUpdater, nsIMacUserActivityUpdater)
16 nsMacUserActivityUpdater::UpdateLocation(const nsAString& aPageUrl,
17 const nsAString& aPageTitle,
18 nsIBaseWindow* aWindow) {
19 NS_OBJC_BEGIN_TRY_BLOCK_RETURN;
20 if (gfxPlatform::IsHeadless()) {
21 // In headless mode, Handoff will fail since there is no Cocoa window.
25 BaseWindow* cocoaWin = nsMacUserActivityUpdater::GetCocoaWindow(aWindow);
27 return NS_ERROR_FAILURE;
30 NSURL* pageUrl = nsCocoaUtils::ToNSURL(aPageUrl);
31 if (!pageUrl || (![pageUrl.scheme isEqualToString:@"https"] &&
32 ![pageUrl.scheme isEqualToString:@"http"])) {
33 [cocoaWin.userActivity invalidate];
37 NSString* pageTitle = nsCocoaUtils::ToNSString(aPageTitle);
39 pageTitle = pageUrl.absoluteString;
42 NSUserActivity* userActivity = [[NSUserActivity alloc]
43 initWithActivityType:NSUserActivityTypeBrowsingWeb];
44 userActivity.webpageURL = pageUrl;
45 userActivity.title = pageTitle;
46 cocoaWin.userActivity = userActivity;
47 [userActivity release];
51 NS_OBJC_END_TRY_BLOCK_RETURN(NS_ERROR_FAILURE);
54 BaseWindow* nsMacUserActivityUpdater::GetCocoaWindow(nsIBaseWindow* aWindow) {
55 nsCOMPtr<nsIWidget> widget = nullptr;
56 aWindow->GetMainWidget(getter_AddRefs(widget));
60 BaseWindow* cocoaWin = (BaseWindow*)widget->GetNativeData(NS_NATIVE_WINDOW);