Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / widget / cocoa / nsMacUserActivityUpdater.mm
blob9fedb618a4eb0a35e3d4625fe6f108571d92f0e8
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)
15 NS_IMETHODIMP
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.
22     return NS_OK;
23   }
25   BaseWindow* cocoaWin = nsMacUserActivityUpdater::GetCocoaWindow(aWindow);
26   if (!cocoaWin) {
27     return NS_ERROR_FAILURE;
28   }
30   NSURL* pageUrl = nsCocoaUtils::ToNSURL(aPageUrl);
31   if (!pageUrl || (![pageUrl.scheme isEqualToString:@"https"] &&
32                    ![pageUrl.scheme isEqualToString:@"http"])) {
33     [cocoaWin.userActivity invalidate];
34     return NS_OK;
35   }
37   NSString* pageTitle = nsCocoaUtils::ToNSString(aPageTitle);
38   if (!pageTitle) {
39     pageTitle = pageUrl.absoluteString;
40   }
42   NSUserActivity* userActivity = [[NSUserActivity alloc]
43       initWithActivityType:NSUserActivityTypeBrowsingWeb];
44   userActivity.webpageURL = pageUrl;
45   userActivity.title = pageTitle;
46   cocoaWin.userActivity = userActivity;
47   [userActivity release];
49   return NS_OK;
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));
57   if (!widget) {
58     return nil;
59   }
60   BaseWindow* cocoaWin = (BaseWindow*)widget->GetNativeData(NS_NATIVE_WINDOW);
61   if (!cocoaWin) {
62     return nil;
63   }
64   return cocoaWin;