| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" | 5 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" |
| 6 | 6 |
| 7 #import <QuartzCore/QuartzCore.h> | 7 #import <QuartzCore/QuartzCore.h> |
| 8 | 8 |
| 9 #include <cmath> | 9 #include <cmath> |
| 10 #include <limits> | 10 #include <limits> |
| 11 #include <string> | 11 #include <string> |
| 12 | 12 |
| 13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 14 #include "base/mac/mac_util.h" | 14 #include "base/mac/mac_util.h" |
| 15 #include "base/mac/scoped_nsautorelease_pool.h" | 15 #include "base/mac/scoped_nsautorelease_pool.h" |
| 16 #include "base/mac/sdk_forward_declarations.h" | 16 #include "base/mac/sdk_forward_declarations.h" |
| 17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "base/metrics/histogram_macros.h" | 18 #include "base/metrics/histogram_macros.h" |
| 19 #include "base/metrics/user_metrics.h" |
| 19 #include "base/strings/sys_string_conversions.h" | 20 #include "base/strings/sys_string_conversions.h" |
| 20 #include "chrome/app/chrome_command_ids.h" | 21 #include "chrome/app/chrome_command_ids.h" |
| 21 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" | 22 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" |
| 22 #include "chrome/browser/extensions/tab_helper.h" | 23 #include "chrome/browser/extensions/tab_helper.h" |
| 23 #include "chrome/browser/favicon/favicon_utils.h" | 24 #include "chrome/browser/favicon/favicon_utils.h" |
| 24 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
| 25 #include "chrome/browser/profiles/profile_manager.h" | 26 #include "chrome/browser/profiles/profile_manager.h" |
| 26 #include "chrome/browser/themes/theme_service.h" | 27 #include "chrome/browser/themes/theme_service.h" |
| 27 #include "chrome/browser/ui/browser.h" | 28 #include "chrome/browser/ui/browser.h" |
| 28 #include "chrome/browser/ui/browser_navigator.h" | 29 #include "chrome/browser/ui/browser_navigator.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 52 #include "chrome/grit/generated_resources.h" | 53 #include "chrome/grit/generated_resources.h" |
| 53 #include "chrome/grit/theme_resources.h" | 54 #include "chrome/grit/theme_resources.h" |
| 54 #include "components/grit/components_scaled_resources.h" | 55 #include "components/grit/components_scaled_resources.h" |
| 55 #include "components/metrics/proto/omnibox_event.pb.h" | 56 #include "components/metrics/proto/omnibox_event.pb.h" |
| 56 #include "components/omnibox/browser/autocomplete_classifier.h" | 57 #include "components/omnibox/browser/autocomplete_classifier.h" |
| 57 #include "components/omnibox/browser/autocomplete_match.h" | 58 #include "components/omnibox/browser/autocomplete_match.h" |
| 58 #include "components/prefs/pref_service.h" | 59 #include "components/prefs/pref_service.h" |
| 59 #include "components/url_formatter/url_fixer.h" | 60 #include "components/url_formatter/url_fixer.h" |
| 60 #include "components/web_modal/web_contents_modal_dialog_manager.h" | 61 #include "components/web_modal/web_contents_modal_dialog_manager.h" |
| 61 #include "content/public/browser/navigation_controller.h" | 62 #include "content/public/browser/navigation_controller.h" |
| 62 #include "content/public/browser/user_metrics.h" | |
| 63 #include "content/public/browser/web_contents.h" | 63 #include "content/public/browser/web_contents.h" |
| 64 #include "skia/ext/skia_utils_mac.h" | 64 #include "skia/ext/skia_utils_mac.h" |
| 65 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h
" | 65 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMNSAnimation+Duration.h
" |
| 66 #include "ui/base/cocoa/animation_utils.h" | 66 #include "ui/base/cocoa/animation_utils.h" |
| 67 #include "ui/base/cocoa/cocoa_base_utils.h" | 67 #include "ui/base/cocoa/cocoa_base_utils.h" |
| 68 #import "ui/base/cocoa/tracking_area.h" | 68 #import "ui/base/cocoa/tracking_area.h" |
| 69 #include "ui/base/l10n/l10n_util.h" | 69 #include "ui/base/l10n/l10n_util.h" |
| 70 #include "ui/base/material_design/material_design_controller.h" | 70 #include "ui/base/material_design/material_design_controller.h" |
| 71 #include "ui/base/models/list_selection_model.h" | 71 #include "ui/base/models/list_selection_model.h" |
| 72 #include "ui/base/resource/resource_bundle.h" | 72 #include "ui/base/resource/resource_bundle.h" |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 TabController* controller = [[[TabController alloc] init] autorelease]; | 631 TabController* controller = [[[TabController alloc] init] autorelease]; |
| 632 [controller setTarget:self]; | 632 [controller setTarget:self]; |
| 633 [controller setAction:@selector(selectTab:)]; | 633 [controller setAction:@selector(selectTab:)]; |
| 634 [[controller view] setHidden:YES]; | 634 [[controller view] setHidden:YES]; |
| 635 | 635 |
| 636 return controller; | 636 return controller; |
| 637 } | 637 } |
| 638 | 638 |
| 639 // (Private) Handles a click on the new tab button. | 639 // (Private) Handles a click on the new tab button. |
| 640 - (void)clickNewTabButton:(id)sender { | 640 - (void)clickNewTabButton:(id)sender { |
| 641 content::RecordAction(UserMetricsAction("NewTab_Button")); | 641 base::RecordAction(UserMetricsAction("NewTab_Button")); |
| 642 UMA_HISTOGRAM_ENUMERATION("Tab.NewTab", TabStripModel::NEW_TAB_BUTTON, | 642 UMA_HISTOGRAM_ENUMERATION("Tab.NewTab", TabStripModel::NEW_TAB_BUTTON, |
| 643 TabStripModel::NEW_TAB_ENUM_COUNT); | 643 TabStripModel::NEW_TAB_ENUM_COUNT); |
| 644 tabStripModel_->delegate()->AddTabAt(GURL(), -1, true); | 644 tabStripModel_->delegate()->AddTabAt(GURL(), -1, true); |
| 645 } | 645 } |
| 646 | 646 |
| 647 // (Private) Returns the number of open tabs in the tab strip. This is the | 647 // (Private) Returns the number of open tabs in the tab strip. This is the |
| 648 // number of TabControllers we know about (as there's a 1-to-1 mapping from | 648 // number of TabControllers we know about (as there's a 1-to-1 mapping from |
| 649 // these controllers to a tab) less the number of closing tabs. | 649 // these controllers to a tab) less the number of closing tabs. |
| 650 - (NSInteger)numberOfOpenTabs { | 650 - (NSInteger)numberOfOpenTabs { |
| 651 return static_cast<NSInteger>(tabStripModel_->count()); | 651 return static_cast<NSInteger>(tabStripModel_->count()); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 // Cancel any pending tab transition. | 807 // Cancel any pending tab transition. |
| 808 hoverTabSelector_->CancelTabTransition(); | 808 hoverTabSelector_->CancelTabTransition(); |
| 809 | 809 |
| 810 if ([hoveredTab_ isEqual:sender]) | 810 if ([hoveredTab_ isEqual:sender]) |
| 811 [self setHoveredTab:nil]; | 811 [self setHoveredTab:nil]; |
| 812 | 812 |
| 813 NSInteger index = [self modelIndexForTabView:sender]; | 813 NSInteger index = [self modelIndexForTabView:sender]; |
| 814 if (!tabStripModel_->ContainsIndex(index)) | 814 if (!tabStripModel_->ContainsIndex(index)) |
| 815 return; | 815 return; |
| 816 | 816 |
| 817 content::RecordAction(UserMetricsAction("CloseTab_Mouse")); | 817 base::RecordAction(UserMetricsAction("CloseTab_Mouse")); |
| 818 const NSInteger numberOfOpenTabs = [self numberOfOpenTabs]; | 818 const NSInteger numberOfOpenTabs = [self numberOfOpenTabs]; |
| 819 if (numberOfOpenTabs > 1) { | 819 if (numberOfOpenTabs > 1) { |
| 820 bool isClosingLastTab = index == numberOfOpenTabs - 1; | 820 bool isClosingLastTab = index == numberOfOpenTabs - 1; |
| 821 if (!isClosingLastTab) { | 821 if (!isClosingLastTab) { |
| 822 // Limit the width available for laying out tabs so that tabs are not | 822 // Limit the width available for laying out tabs so that tabs are not |
| 823 // resized until a later time (when the mouse leaves the tab strip). | 823 // resized until a later time (when the mouse leaves the tab strip). |
| 824 // However, if the tab being closed is a pinned tab, break out of | 824 // However, if the tab being closed is a pinned tab, break out of |
| 825 // rapid-closure mode since the mouse is almost guaranteed not to be over | 825 // rapid-closure mode since the mouse is almost guaranteed not to be over |
| 826 // the closebox of the adjacent tab (due to the difference in widths). | 826 // the closebox of the adjacent tab (due to the difference in widths). |
| 827 // TODO(pinkerton): re-visit when handling tab overflow. | 827 // TODO(pinkerton): re-visit when handling tab overflow. |
| (...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2114 WindowOpenDisposition disposition; | 2114 WindowOpenDisposition disposition; |
| 2115 [self droppingURLsAt:point | 2115 [self droppingURLsAt:point |
| 2116 givesIndex:&index | 2116 givesIndex:&index |
| 2117 disposition:&disposition | 2117 disposition:&disposition |
| 2118 activateTab:activateTab]; | 2118 activateTab:activateTab]; |
| 2119 | 2119 |
| 2120 // Either insert a new tab or open in a current tab. | 2120 // Either insert a new tab or open in a current tab. |
| 2121 switch (disposition) { | 2121 switch (disposition) { |
| 2122 case WindowOpenDisposition::NEW_FOREGROUND_TAB: | 2122 case WindowOpenDisposition::NEW_FOREGROUND_TAB: |
| 2123 case WindowOpenDisposition::NEW_BACKGROUND_TAB: { | 2123 case WindowOpenDisposition::NEW_BACKGROUND_TAB: { |
| 2124 content::RecordAction(UserMetricsAction("Tab_DropURLBetweenTabs")); | 2124 base::RecordAction(UserMetricsAction("Tab_DropURLBetweenTabs")); |
| 2125 chrome::NavigateParams params(browser_, *url, | 2125 chrome::NavigateParams params(browser_, *url, |
| 2126 ui::PAGE_TRANSITION_TYPED); | 2126 ui::PAGE_TRANSITION_TYPED); |
| 2127 params.disposition = disposition; | 2127 params.disposition = disposition; |
| 2128 params.tabstrip_index = index; | 2128 params.tabstrip_index = index; |
| 2129 params.tabstrip_add_types = | 2129 params.tabstrip_add_types = |
| 2130 TabStripModel::ADD_ACTIVE | TabStripModel::ADD_FORCE_INDEX; | 2130 TabStripModel::ADD_ACTIVE | TabStripModel::ADD_FORCE_INDEX; |
| 2131 chrome::Navigate(¶ms); | 2131 chrome::Navigate(¶ms); |
| 2132 break; | 2132 break; |
| 2133 } | 2133 } |
| 2134 case WindowOpenDisposition::CURRENT_TAB: { | 2134 case WindowOpenDisposition::CURRENT_TAB: { |
| 2135 content::RecordAction(UserMetricsAction("Tab_DropURLOnTab")); | 2135 base::RecordAction(UserMetricsAction("Tab_DropURLOnTab")); |
| 2136 OpenURLParams params(*url, Referrer(), WindowOpenDisposition::CURRENT_TAB, | 2136 OpenURLParams params(*url, Referrer(), WindowOpenDisposition::CURRENT_TAB, |
| 2137 ui::PAGE_TRANSITION_TYPED, false); | 2137 ui::PAGE_TRANSITION_TYPED, false); |
| 2138 tabStripModel_->GetWebContentsAt(index)->OpenURL(params); | 2138 tabStripModel_->GetWebContentsAt(index)->OpenURL(params); |
| 2139 tabStripModel_->ActivateTabAt(index, true); | 2139 tabStripModel_->ActivateTabAt(index, true); |
| 2140 break; | 2140 break; |
| 2141 } | 2141 } |
| 2142 default: | 2142 default: |
| 2143 NOTIMPLEMENTED(); | 2143 NOTIMPLEMENTED(); |
| 2144 } | 2144 } |
| 2145 } | 2145 } |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2417 for (int i = 0; i < tabStripModel_->count(); i++) { | 2417 for (int i = 0; i < tabStripModel_->count(); i++) { |
| 2418 [self updateIconsForContents:tabStripModel_->GetWebContentsAt(i) atIndex:i]; | 2418 [self updateIconsForContents:tabStripModel_->GetWebContentsAt(i) atIndex:i]; |
| 2419 } | 2419 } |
| 2420 } | 2420 } |
| 2421 | 2421 |
| 2422 - (void)setVisualEffectsDisabledForFullscreen:(BOOL)fullscreen { | 2422 - (void)setVisualEffectsDisabledForFullscreen:(BOOL)fullscreen { |
| 2423 [tabStripView_ setVisualEffectsDisabledForFullscreen:fullscreen]; | 2423 [tabStripView_ setVisualEffectsDisabledForFullscreen:fullscreen]; |
| 2424 } | 2424 } |
| 2425 | 2425 |
| 2426 @end | 2426 @end |
| OLD | NEW |