Commit e374e1a0 authored by edchin's avatar edchin Committed by Commit Bot

[ios] Support drop to create new Chrome window with moved tab

This CL allows dragging a tab to the edge of the screen to create
a new window with the tab.

Bug: 1087850
Change-Id: I366d8acaa949a693341fd7159a643c738bddd386
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2251055
Commit-Queue: edchin <edchin@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795073}
parent 322be03c
......@@ -70,6 +70,7 @@ if (breakpad_enabled) {
chromium_bundle_id = "chrome.ios.herebedragons"
chromium_handoff_id = "$ios_app_bundle_id_prefix.chrome.handoff"
ios_move_tab_activity_type = "$ios_app_bundle_id_prefix.chrome.move-tab"
if (is_chrome_branded) {
chromium_short_name = "Chrome"
......
......@@ -377,6 +377,7 @@ ios_app_bundle("chrome") {
"CHROMIUM_URL_SCHEME_3=$url_x_callback_scheme",
"CHROMIUM_URL_CHANNEL_SCHEME=$url_channel_scheme",
"SSOAUTH_URL_SCHEME=$url_ssoauth_scheme",
"IOS_MOVE_TAB_ACTIVITY_TYPE=$ios_move_tab_activity_type",
]
if (ios_encryption_export_compliance_code != "") {
......
......@@ -96,6 +96,7 @@
<string>OpenInChromeIntent</string>
<string>SearchInChromeIntent</string>
<string>OpenInChromeIncognitoIntent</string>
<string>${IOS_MOVE_TAB_ACTIVITY_TYPE}</string>
</array>
<key>UIBackgroundModes</key>
<array>
......
......@@ -34,10 +34,10 @@
#include "ios/chrome/browser/crash_report/crash_keys_helper.h"
#include "ios/chrome/browser/crash_report/crash_report_helper.h"
#import "ios/chrome/browser/first_run/first_run.h"
#include "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/main/browser_list.h"
#import "ios/chrome/browser/main/browser_list_factory.h"
#import "ios/chrome/browser/main/browser_util.h"
#include "ios/chrome/browser/ntp/features.h"
#import "ios/chrome/browser/ntp_snippets/content_suggestions_scheduler_notifications.h"
#include "ios/chrome/browser/screenshot/screenshot_delegate.h"
......@@ -375,6 +375,10 @@ const char kMultiWindowOpenInNewWindowHistogram[] =
[self openOrReuseTabInMode:mode
withUrlLoadParams:params
tabOpenedCompletion:nil];
} else if (ActivityIsTabMove(activity)) {
NSString* tabID = GetTabIDFromActivity(activity);
MoveTabToBrowser(tabID, self.mainInterface.browser,
/*destination_tab_index=*/0);
} else if (!activityWithCompletion) {
// Completion involves user interaction.
// Only one can be triggered.
......
......@@ -2,6 +2,9 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/buildflag_header.gni")
import("//ios/build/chrome_build.gni")
source_set("window_activities") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
......@@ -9,6 +12,7 @@ source_set("window_activities") {
"window_activity_helpers.mm",
]
deps = [
":ios_move_tab_activity_type_buildflags",
"//base",
"//ios/chrome/browser:chrome_url_constants",
"//ios/chrome/browser/url_loading",
......@@ -17,3 +21,8 @@ source_set("window_activities") {
"//url",
]
}
buildflag_header("ios_move_tab_activity_type_buildflags") {
header = "move_tab_activity_type_buildflags.h"
flags = [ "IOS_MOVE_TAB_ACTIVITY_TYPE=\"$ios_move_tab_activity_type\"" ]
}
......@@ -71,4 +71,7 @@ UrlLoadParams LoadParamsFromActivity(NSUserActivity* activity);
// Returns the recorded origin for the given activity.
WindowActivityOrigin OriginOfActivity(NSUserActivity* activity);
// Returns the tab identifier from the given activity.
NSString* GetTabIDFromActivity(NSUserActivity* activity);
#endif // IOS_CHROME_BROWSER_WINDOW_ACTIVITIES_WINDOW_ACTIVITY_HELPERS_H_
......@@ -9,15 +9,16 @@
#endif
#include "base/mac/foundation_util.h"
#include "base/strings/sys_string_conversions.h"
#include "ios/chrome/browser/chrome_url_constants.h"
#import "ios/chrome/browser/url_loading/url_loading_params.h"
#include "ios/chrome/browser/window_activities/move_tab_activity_type_buildflags.h"
#import "ios/web/public/navigation/navigation_manager.h"
#import "net/base/mac/url_conversions.h"
// Activity types.
NSString* const kLoadURLActivityType = @"org.chromium.load.url";
NSString* const kLoadIncognitoURLActivityType = @"org.chromium.load.otr-url";
NSString* const kMoveTabActivityType = @"org.chromium.move-tab";
// User info keys.
NSString* const kURLKey = @"LoadParams_URL";
......@@ -69,8 +70,10 @@ NSUserActivity* ActivityToLoadURL(WindowActivityOrigin origin,
}
NSUserActivity* ActivityToMoveTab(NSString* tab_id) {
NSString* moveTabActivityType =
base::SysUTF8ToNSString(BUILDFLAG(IOS_MOVE_TAB_ACTIVITY_TYPE));
NSUserActivity* activity =
[[NSUserActivity alloc] initWithActivityType:kMoveTabActivityType];
[[NSUserActivity alloc] initWithActivityType:moveTabActivityType];
[activity addUserInfoEntriesFromDictionary:@{kTabIdentifierKey : tab_id}];
return activity;
}
......@@ -81,7 +84,9 @@ bool ActivityIsURLLoad(NSUserActivity* activity) {
}
bool ActivityIsTabMove(NSUserActivity* activity) {
return [activity.activityType isEqualToString:kMoveTabActivityType];
NSString* moveTabActivityType =
base::SysUTF8ToNSString(BUILDFLAG(IOS_MOVE_TAB_ACTIVITY_TYPE));
return [activity.activityType isEqualToString:moveTabActivityType];
}
UrlLoadParams LoadParamsFromActivity(NSUserActivity* activity) {
......@@ -114,3 +119,9 @@ WindowActivityOrigin OriginOfActivity(NSUserActivity* activity) {
return origin ? static_cast<WindowActivityOrigin>(origin.intValue)
: WindowActivityUnknownOrigin;
}
NSString* GetTabIDFromActivity(NSUserActivity* activity) {
if (!ActivityIsTabMove(activity))
return nil;
return activity.userInfo[kTabIdentifierKey];
}
......@@ -133,6 +133,7 @@ template("chrome_ios_eg2_test_app_host") {
"SSOAUTH_URL_SCHEME=$url_ssoauth_scheme",
"CONTENT_WIDGET_EXTENSION_BUNDLE_ID=$chromium_bundle_id.ContentTodayExtension",
"CHROMIUM_BUNDLE_ID=gtest.$target_name",
"IOS_MOVE_TAB_ACTIVITY_TYPE=$ios_move_tab_activity_type",
]
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment