Index: chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm |
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm |
index 46ee02b7bd2c0a85e26e76dfee4ce049c59e82e4..e7bad4b7bd4785c9408900f4007cd2fd493f93bb 100644 |
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm |
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm |
@@ -179,7 +179,8 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
- (void)setTabTrackingAreasEnabled:(BOOL)enabled; |
- (void)droppingURLsAt:(NSPoint)point |
givesIndex:(NSInteger*)index |
- disposition:(WindowOpenDisposition*)disposition; |
+ disposition:(WindowOpenDisposition*)disposition |
+ activateTab:(BOOL)activateTab; |
- (void)setNewTabButtonHoverState:(BOOL)showHover; |
- (void)themeDidChangeNotification:(NSNotification*)notification; |
- (BOOL)doesAnyOtherWebContents:(content::WebContents*)selected |
@@ -2038,7 +2039,8 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
// to the left, it inserts to the left, and similarly for the right. |
- (void)droppingURLsAt:(NSPoint)point |
givesIndex:(NSInteger*)index |
- disposition:(WindowOpenDisposition*)disposition { |
+ disposition:(WindowOpenDisposition*)disposition |
+ activateTab:(BOOL)activateTab { |
// Proportion of the tab which is considered the "middle" (and causes things |
// to drop on that tab). |
const double kMiddleProportion = 0.5; |
@@ -2069,7 +2071,11 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
// Drop in a new tab before tab |i|? |
if (isRTL ? point.x > rightEdge : point.x < leftEdge) { |
*index = i; |
- *disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; |
+ if (activateTab) { |
+ *disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; |
+ } else { |
+ *disposition = WindowOpenDisposition::NEW_BACKGROUND_TAB; |
+ } |
return; |
} |
@@ -2087,10 +2093,17 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
// If we've made it here, we want to append a new tab to the end. |
*index = -1; |
- *disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; |
+ if (activateTab) { |
+ *disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; |
+ } else { |
+ *disposition = WindowOpenDisposition::NEW_BACKGROUND_TAB; |
+ } |
} |
-- (void)openURL:(GURL*)url inView:(NSView*)view at:(NSPoint)point { |
+- (void)openURL:(GURL*)url |
+ inView:(NSView*)view |
+ at:(NSPoint)point |
+ activateTab:(BOOL)activateTab { |
// Security: Block JavaScript to prevent self-XSS. |
if (url->SchemeIs(url::kJavaScriptScheme)) |
return; |
@@ -2100,11 +2113,13 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
WindowOpenDisposition disposition; |
[self droppingURLsAt:point |
givesIndex:&index |
- disposition:&disposition]; |
+ disposition:&disposition |
+ activateTab:activateTab]; |
// Either insert a new tab or open in a current tab. |
switch (disposition) { |
- case WindowOpenDisposition::NEW_FOREGROUND_TAB: { |
+ case WindowOpenDisposition::NEW_FOREGROUND_TAB: |
+ case WindowOpenDisposition::NEW_BACKGROUND_TAB: { |
content::RecordAction(UserMetricsAction("Tab_DropURLBetweenTabs")); |
chrome::NavigateParams params(browser_, *url, |
ui::PAGE_TRANSITION_TYPED); |
@@ -2137,19 +2152,22 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
return; |
} |
- //TODO(viettrungluu): dropping multiple URLs. |
- if ([urls count] > 1) |
- NOTIMPLEMENTED(); |
- |
- // Get the first URL and fix it up. |
- GURL url(GURL(url_formatter::FixupURL( |
- base::SysNSStringToUTF8([urls objectAtIndex:0]), std::string()))); |
+ for (NSInteger index = [urls count] - 1; index >= 0; index--) { |
+ // Refactor this code. |
+ // https://crbug.com/665261. |
+ GURL url = url_formatter::FixupURL( |
+ base::SysNSStringToUTF8([urls objectAtIndex:index]), std::string()); |
- // If the URL isn't valid, don't bother. |
- if (!url.is_valid()) |
- return; |
+ // If the URL isn't valid, don't bother. |
+ if (!url.is_valid()) |
+ continue; |
- [self openURL:&url inView:view at:point]; |
+ if (index == static_cast<NSInteger>([urls count]) - 1) { |
+ [self openURL:&url inView:view at:point activateTab:YES]; |
+ } else { |
+ [self openURL:&url inView:view at:point activateTab:NO]; |
+ } |
+ } |
} |
// (URLDropTargetController protocol) |
@@ -2163,7 +2181,7 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
metrics::OmniboxEventProto::BLANK, &match, NULL); |
GURL url(match.destination_url); |
- [self openURL:&url inView:view at:point]; |
+ [self openURL:&url inView:view at:point activateTab:YES]; |
} |
// (URLDropTargetController protocol) |
@@ -2178,7 +2196,8 @@ NSRect FlipRectInView(NSView* view, NSRect rect) { |
WindowOpenDisposition disposition; |
[self droppingURLsAt:point |
givesIndex:&index |
- disposition:&disposition]; |
+ disposition:&disposition |
+ activateTab:YES]; |
NSPoint arrowPos = NSMakePoint(0, arrowBaseY); |
if (index == -1) { |