| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "chrome/browser/ui/browser.h" | 5 #include "chrome/browser/ui/browser.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <shellapi.h> | 8 #include <shellapi.h> |
| 9 #include <windows.h> | 9 #include <windows.h> |
| 10 #endif // OS_WIN | 10 #endif // OS_WIN |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 #include "chrome/browser/sessions/tab_restore_service.h" | 75 #include "chrome/browser/sessions/tab_restore_service.h" |
| 76 #include "chrome/browser/status_bubble.h" | 76 #include "chrome/browser/status_bubble.h" |
| 77 #include "chrome/browser/sync/profile_sync_service.h" | 77 #include "chrome/browser/sync/profile_sync_service.h" |
| 78 #include "chrome/browser/sync/sync_ui_util.h" | 78 #include "chrome/browser/sync/sync_ui_util.h" |
| 79 #include "chrome/browser/tab_closeable_state_watcher.h" | 79 #include "chrome/browser/tab_closeable_state_watcher.h" |
| 80 #include "chrome/browser/tab_contents/interstitial_page.h" | 80 #include "chrome/browser/tab_contents/interstitial_page.h" |
| 81 #include "chrome/browser/tab_contents/navigation_controller.h" | 81 #include "chrome/browser/tab_contents/navigation_controller.h" |
| 82 #include "chrome/browser/tab_contents/navigation_entry.h" | 82 #include "chrome/browser/tab_contents/navigation_entry.h" |
| 83 #include "chrome/browser/tab_contents/tab_contents.h" | 83 #include "chrome/browser/tab_contents/tab_contents.h" |
| 84 #include "chrome/browser/tab_contents/tab_contents_view.h" | 84 #include "chrome/browser/tab_contents/tab_contents_view.h" |
| 85 #include "chrome/browser/tab_contents_wrapper.h" |
| 85 #include "chrome/browser/tab_menu_model.h" | 86 #include "chrome/browser/tab_menu_model.h" |
| 86 #include "chrome/browser/tabs/tab_strip_model.h" | 87 #include "chrome/browser/tabs/tab_strip_model.h" |
| 87 #include "chrome/browser/ui/browser_navigator.h" | 88 #include "chrome/browser/ui/browser_navigator.h" |
| 88 #include "chrome/browser/upgrade_detector.h" | 89 #include "chrome/browser/upgrade_detector.h" |
| 89 #include "chrome/browser/web_applications/web_app.h" | 90 #include "chrome/browser/web_applications/web_app.h" |
| 90 #include "chrome/browser/window_sizer.h" | 91 #include "chrome/browser/window_sizer.h" |
| 91 #include "chrome/common/chrome_constants.h" | 92 #include "chrome/common/chrome_constants.h" |
| 92 #include "chrome/common/chrome_switches.h" | 93 #include "chrome/common/chrome_switches.h" |
| 93 #include "chrome/common/content_restriction.h" | 94 #include "chrome/common/content_restriction.h" |
| 94 #include "chrome/common/extensions/extension.h" | 95 #include "chrome/common/extensions/extension.h" |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 | 322 |
| 322 // static | 323 // static |
| 323 Browser* Browser::CreateForPopup(Type type, | 324 Browser* Browser::CreateForPopup(Type type, |
| 324 Profile* profile, | 325 Profile* profile, |
| 325 TabContents* new_contents, | 326 TabContents* new_contents, |
| 326 const gfx::Rect& initial_bounds) { | 327 const gfx::Rect& initial_bounds) { |
| 327 DCHECK(type & TYPE_POPUP); | 328 DCHECK(type & TYPE_POPUP); |
| 328 Browser* browser = new Browser(type, profile); | 329 Browser* browser = new Browser(type, profile); |
| 329 browser->set_override_bounds(initial_bounds); | 330 browser->set_override_bounds(initial_bounds); |
| 330 browser->CreateBrowserWindow(); | 331 browser->CreateBrowserWindow(); |
| 331 browser->tabstrip_model()->AppendTabContents(new_contents, true); | 332 TabContentsWrapper* wrapper = new TabContentsWrapper(new_contents); |
| 333 browser->tabstrip_model()->AppendTabContents(wrapper, true); |
| 332 return browser; | 334 return browser; |
| 333 } | 335 } |
| 334 | 336 |
| 335 // static | 337 // static |
| 336 Browser* Browser::CreateForType(Type type, Profile* profile) { | 338 Browser* Browser::CreateForType(Type type, Profile* profile) { |
| 337 Browser* browser = new Browser(type, profile); | 339 Browser* browser = new Browser(type, profile); |
| 338 browser->CreateBrowserWindow(); | 340 browser->CreateBrowserWindow(); |
| 339 return browser; | 341 return browser; |
| 340 } | 342 } |
| 341 | 343 |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 url = extension->GetFullLaunchURL(); | 556 url = extension->GetFullLaunchURL(); |
| 555 } | 557 } |
| 556 | 558 |
| 557 // TODO(erikkay) this can't be correct for extensions | 559 // TODO(erikkay) this can't be correct for extensions |
| 558 std::string app_name = web_app::GenerateApplicationNameFromURL(url); | 560 std::string app_name = web_app::GenerateApplicationNameFromURL(url); |
| 559 RegisterAppPrefs(app_name); | 561 RegisterAppPrefs(app_name); |
| 560 | 562 |
| 561 bool as_panel = extension && (container == extension_misc::LAUNCH_PANEL); | 563 bool as_panel = extension && (container == extension_misc::LAUNCH_PANEL); |
| 562 Browser* browser = Browser::CreateForApp(app_name, extension, profile, | 564 Browser* browser = Browser::CreateForApp(app_name, extension, profile, |
| 563 as_panel); | 565 as_panel); |
| 564 TabContents* contents = | 566 TabContentsWrapper* wrapper = |
| 565 browser->AddSelectedTabWithURL(url, PageTransition::START_PAGE); | 567 browser->AddSelectedTabWithURL(url, PageTransition::START_PAGE); |
| 568 TabContents* contents = wrapper->tab_contents(); |
| 566 contents->GetMutableRendererPrefs()->can_accept_load_drops = false; | 569 contents->GetMutableRendererPrefs()->can_accept_load_drops = false; |
| 567 contents->render_view_host()->SyncRendererPrefs(); | 570 contents->render_view_host()->SyncRendererPrefs(); |
| 568 browser->window()->Show(); | 571 browser->window()->Show(); |
| 569 | 572 |
| 570 // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial | 573 // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial |
| 571 // focus explicitly. | 574 // focus explicitly. |
| 572 contents->view()->SetInitialFocus(); | 575 contents->view()->SetInitialFocus(); |
| 573 | 576 |
| 574 if (!as_panel) { | 577 if (!as_panel) { |
| 575 // Set UPDATE_SHORTCUT as the pending web app action. This action is picked | 578 // Set UPDATE_SHORTCUT as the pending web app action. This action is picked |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 | 615 |
| 613 // TODO(erikkay): START_PAGE doesn't seem like the right transition in all | 616 // TODO(erikkay): START_PAGE doesn't seem like the right transition in all |
| 614 // cases. | 617 // cases. |
| 615 browser::NavigateParams params(browser, extension->GetFullLaunchURL(), | 618 browser::NavigateParams params(browser, extension->GetFullLaunchURL(), |
| 616 PageTransition::START_PAGE); | 619 PageTransition::START_PAGE); |
| 617 params.tabstrip_add_types = add_type; | 620 params.tabstrip_add_types = add_type; |
| 618 | 621 |
| 619 // Launch the application in the existing TabContents, if it was supplied. | 622 // Launch the application in the existing TabContents, if it was supplied. |
| 620 if (existing_tab) { | 623 if (existing_tab) { |
| 621 TabStripModel* model = browser->tabstrip_model(); | 624 TabStripModel* model = browser->tabstrip_model(); |
| 622 int tab_index = model->GetIndexOfTabContents(existing_tab); | 625 int tab_index = model->GetWrapperIndex(existing_tab); |
| 623 | 626 |
| 624 existing_tab->OpenURL(extension->GetFullLaunchURL(), existing_tab->GetURL(), | 627 existing_tab->OpenURL(extension->GetFullLaunchURL(), existing_tab->GetURL(), |
| 625 CURRENT_TAB, PageTransition::LINK); | 628 CURRENT_TAB, PageTransition::LINK); |
| 626 if (params.tabstrip_add_types & TabStripModel::ADD_PINNED) { | 629 if (params.tabstrip_add_types & TabStripModel::ADD_PINNED) { |
| 627 model->SetTabPinned(tab_index, true); | 630 model->SetTabPinned(tab_index, true); |
| 628 tab_index = model->GetIndexOfTabContents(existing_tab); | 631 tab_index = model->GetWrapperIndex(existing_tab); |
| 629 } | 632 } |
| 630 if (params.tabstrip_add_types & TabStripModel::ADD_SELECTED) | 633 if (params.tabstrip_add_types & TabStripModel::ADD_SELECTED) |
| 631 model->SelectTabContentsAt(tab_index, true); | 634 model->SelectTabContentsAt(tab_index, true); |
| 632 | 635 |
| 633 contents = existing_tab; | 636 contents = existing_tab; |
| 634 } else { | 637 } else { |
| 635 params.disposition = NEW_FOREGROUND_TAB; | 638 params.disposition = NEW_FOREGROUND_TAB; |
| 636 browser::Navigate(¶ms); | 639 browser::Navigate(¶ms); |
| 637 contents = params.target_contents; | 640 contents = params.target_contents->tab_contents(); |
| 638 } | 641 } |
| 639 | 642 |
| 640 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN) | 643 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN) |
| 641 browser->window()->SetFullscreen(true); | 644 browser->window()->SetFullscreen(true); |
| 642 | 645 |
| 643 return contents; | 646 return contents; |
| 644 } | 647 } |
| 645 | 648 |
| 646 // static | 649 // static |
| 647 void Browser::OpenBookmarkManagerWindow(Profile* profile) { | 650 void Browser::OpenBookmarkManagerWindow(Profile* profile) { |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 757 } | 760 } |
| 758 | 761 |
| 759 SkBitmap Browser::GetCurrentPageIcon() const { | 762 SkBitmap Browser::GetCurrentPageIcon() const { |
| 760 TabContents* contents = GetSelectedTabContents(); | 763 TabContents* contents = GetSelectedTabContents(); |
| 761 // |contents| can be NULL since GetCurrentPageIcon() is called by the window | 764 // |contents| can be NULL since GetCurrentPageIcon() is called by the window |
| 762 // during the window's creation (before tabs have been added). | 765 // during the window's creation (before tabs have been added). |
| 763 return contents ? contents->GetFavIcon() : SkBitmap(); | 766 return contents ? contents->GetFavIcon() : SkBitmap(); |
| 764 } | 767 } |
| 765 | 768 |
| 766 string16 Browser::GetWindowTitleForCurrentTab() const { | 769 string16 Browser::GetWindowTitleForCurrentTab() const { |
| 767 TabContents* contents = | 770 TabContents* contents = GetSelectedTabContents(); |
| 768 tab_handler_->GetTabStripModel()->GetSelectedTabContents(); | |
| 769 string16 title; | 771 string16 title; |
| 770 | 772 |
| 771 // |contents| can be NULL because GetWindowTitleForCurrentTab is called by the | 773 // |contents| can be NULL because GetWindowTitleForCurrentTab is called by the |
| 772 // window during the window's creation (before tabs have been added). | 774 // window during the window's creation (before tabs have been added). |
| 773 if (contents) { | 775 if (contents) { |
| 774 title = contents->GetTitle(); | 776 title = contents->GetTitle(); |
| 775 FormatTitleForDisplay(&title); | 777 FormatTitleForDisplay(&title); |
| 776 } | 778 } |
| 777 if (title.empty()) | 779 if (title.empty()) |
| 778 title = TabContents::GetDefaultTitle(); | 780 title = TabContents::GetDefaultTitle(); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 | 892 |
| 891 int Browser::selected_index() const { | 893 int Browser::selected_index() const { |
| 892 return tab_handler_->GetTabStripModel()->selected_index(); | 894 return tab_handler_->GetTabStripModel()->selected_index(); |
| 893 } | 895 } |
| 894 | 896 |
| 895 int Browser::GetIndexOfController( | 897 int Browser::GetIndexOfController( |
| 896 const NavigationController* controller) const { | 898 const NavigationController* controller) const { |
| 897 return tab_handler_->GetTabStripModel()->GetIndexOfController(controller); | 899 return tab_handler_->GetTabStripModel()->GetIndexOfController(controller); |
| 898 } | 900 } |
| 899 | 901 |
| 900 TabContents* Browser::GetTabContentsAt(int index) const { | 902 TabContentsWrapper* Browser::GetSelectedTabContentsWrapper() const { |
| 901 return tab_handler_->GetTabStripModel()->GetTabContentsAt(index); | 903 return tabstrip_model()->GetSelectedTabContents(); |
| 904 } |
| 905 TabContentsWrapper* Browser::GetTabContentsWrapperAt(int index) const { |
| 906 return tabstrip_model()->GetTabContentsAt(index); |
| 902 } | 907 } |
| 903 | 908 |
| 904 TabContents* Browser::GetSelectedTabContents() const { | 909 TabContents* Browser::GetSelectedTabContents() const { |
| 905 return tab_handler_->GetTabStripModel()->GetSelectedTabContents(); | 910 TabContentsWrapper* wrapper = GetSelectedTabContentsWrapper(); |
| 911 if (wrapper) |
| 912 return wrapper->tab_contents(); |
| 913 return NULL; |
| 914 } |
| 915 |
| 916 TabContents* Browser::GetTabContentsAt(int index) const { |
| 917 TabContentsWrapper* wrapper = tabstrip_model()->GetTabContentsAt(index); |
| 918 if (wrapper) |
| 919 return wrapper->tab_contents(); |
| 920 return NULL; |
| 906 } | 921 } |
| 907 | 922 |
| 908 void Browser::SelectTabContentsAt(int index, bool user_gesture) { | 923 void Browser::SelectTabContentsAt(int index, bool user_gesture) { |
| 909 tab_handler_->GetTabStripModel()->SelectTabContentsAt(index, user_gesture); | 924 tab_handler_->GetTabStripModel()->SelectTabContentsAt(index, user_gesture); |
| 910 } | 925 } |
| 911 | 926 |
| 912 void Browser::CloseAllTabs() { | 927 void Browser::CloseAllTabs() { |
| 913 tab_handler_->GetTabStripModel()->CloseAllTabs(); | 928 tab_handler_->GetTabStripModel()->CloseAllTabs(); |
| 914 } | 929 } |
| 915 | 930 |
| 916 //////////////////////////////////////////////////////////////////////////////// | 931 //////////////////////////////////////////////////////////////////////////////// |
| 917 // Browser, Tab adding/showing functions: | 932 // Browser, Tab adding/showing functions: |
| 918 | 933 |
| 919 int Browser::GetIndexForInsertionDuringRestore(int relative_index) { | 934 int Browser::GetIndexForInsertionDuringRestore(int relative_index) { |
| 920 return (tab_handler_->GetTabStripModel()->insertion_policy() == | 935 return (tab_handler_->GetTabStripModel()->insertion_policy() == |
| 921 TabStripModel::INSERT_AFTER) ? tab_count() : relative_index; | 936 TabStripModel::INSERT_AFTER) ? tab_count() : relative_index; |
| 922 } | 937 } |
| 923 | 938 |
| 924 TabContents* Browser::AddSelectedTabWithURL(const GURL& url, | 939 TabContentsWrapper* Browser::AddSelectedTabWithURL(const GURL& url, |
| 925 PageTransition::Type transition) { | 940 PageTransition::Type transition) { |
| 926 browser::NavigateParams params(this, url, transition); | 941 browser::NavigateParams params(this, url, transition); |
| 927 params.disposition = NEW_FOREGROUND_TAB; | 942 params.disposition = NEW_FOREGROUND_TAB; |
| 928 browser::Navigate(¶ms); | 943 browser::Navigate(¶ms); |
| 929 return params.target_contents; | 944 return params.target_contents; |
| 930 } | 945 } |
| 931 | 946 |
| 932 TabContents* Browser::AddTab(TabContents* tab_contents, | 947 TabContents* Browser::AddTab(TabContentsWrapper* tab_contents, |
| 933 PageTransition::Type type) { | 948 PageTransition::Type type) { |
| 934 tab_handler_->GetTabStripModel()->AddTabContents( | 949 tab_handler_->GetTabStripModel()->AddTabContents( |
| 935 tab_contents, -1, type, TabStripModel::ADD_SELECTED); | 950 tab_contents, -1, type, TabStripModel::ADD_SELECTED); |
| 936 return tab_contents; | 951 return tab_contents->tab_contents(); |
| 937 } | 952 } |
| 938 | 953 |
| 939 void Browser::AddTabContents(TabContents* new_contents, | 954 void Browser::AddTabContents(TabContents* new_contents, |
| 940 WindowOpenDisposition disposition, | 955 WindowOpenDisposition disposition, |
| 941 const gfx::Rect& initial_pos, | 956 const gfx::Rect& initial_pos, |
| 942 bool user_gesture) { | 957 bool user_gesture) { |
| 943 AddNewContents(NULL, new_contents, disposition, initial_pos, user_gesture); | 958 AddNewContents(NULL, new_contents, disposition, initial_pos, user_gesture); |
| 944 } | 959 } |
| 945 | 960 |
| 946 void Browser::CloseTabContents(TabContents* contents) { | 961 void Browser::CloseTabContents(TabContents* contents) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 962 | 977 |
| 963 TabContents* Browser::AddRestoredTab( | 978 TabContents* Browser::AddRestoredTab( |
| 964 const std::vector<TabNavigation>& navigations, | 979 const std::vector<TabNavigation>& navigations, |
| 965 int tab_index, | 980 int tab_index, |
| 966 int selected_navigation, | 981 int selected_navigation, |
| 967 const std::string& extension_app_id, | 982 const std::string& extension_app_id, |
| 968 bool select, | 983 bool select, |
| 969 bool pin, | 984 bool pin, |
| 970 bool from_last_session, | 985 bool from_last_session, |
| 971 SessionStorageNamespace* session_storage_namespace) { | 986 SessionStorageNamespace* session_storage_namespace) { |
| 972 TabContents* new_tab = new TabContents( | 987 TabContentsWrapper* wrapper = TabContentsFactory(profile(), NULL, |
| 973 profile(), NULL, MSG_ROUTING_NONE, | 988 MSG_ROUTING_NONE, |
| 974 tab_handler_->GetTabStripModel()->GetSelectedTabContents(), | 989 GetSelectedTabContents(), |
| 975 session_storage_namespace); | 990 session_storage_namespace); |
| 991 TabContents* new_tab = wrapper->tab_contents(); |
| 976 new_tab->SetExtensionAppById(extension_app_id); | 992 new_tab->SetExtensionAppById(extension_app_id); |
| 977 new_tab->controller().RestoreFromState(navigations, selected_navigation, | 993 new_tab->controller().RestoreFromState(navigations, selected_navigation, |
| 978 from_last_session); | 994 from_last_session); |
| 979 | 995 |
| 980 bool really_pin = | 996 bool really_pin = |
| 981 (pin && tab_index == tabstrip_model()->IndexOfFirstNonMiniTab()); | 997 (pin && tab_index == tabstrip_model()->IndexOfFirstNonMiniTab()); |
| 982 tab_handler_->GetTabStripModel()->InsertTabContentsAt( | 998 tab_handler_->GetTabStripModel()->InsertTabContentsAt( |
| 983 tab_index, new_tab, | 999 tab_index, wrapper, |
| 984 select ? TabStripModel::ADD_SELECTED : TabStripModel::ADD_NONE); | 1000 select ? TabStripModel::ADD_SELECTED : TabStripModel::ADD_NONE); |
| 985 if (really_pin) | 1001 if (really_pin) |
| 986 tab_handler_->GetTabStripModel()->SetTabPinned(tab_index, true); | 1002 tab_handler_->GetTabStripModel()->SetTabPinned(tab_index, true); |
| 987 if (select) { | 1003 if (select) { |
| 988 window_->Activate(); | 1004 window_->Activate(); |
| 989 } else { | 1005 } else { |
| 990 // We set the size of the view here, before WebKit does its initial | 1006 // We set the size of the view here, before WebKit does its initial |
| 991 // layout. If we don't, the initial layout of background tabs will be | 1007 // layout. If we don't, the initial layout of background tabs will be |
| 992 // performed with a view width of 0, which may cause script outputs and | 1008 // performed with a view width of 0, which may cause script outputs and |
| 993 // anchor link location calculations to be incorrect even after a new | 1009 // anchor link location calculations to be incorrect even after a new |
| 994 // layout with proper view dimensions. TabStripModel::AddTabContents() | 1010 // layout with proper view dimensions. TabStripModel::AddTabContents() |
| 995 // contains similar logic. | 1011 // contains similar logic. |
| 996 new_tab->view()->SizeContents(window_->GetRestoredBounds().size()); | 1012 new_tab->view()->SizeContents(window_->GetRestoredBounds().size()); |
| 997 new_tab->HideContents(); | 1013 new_tab->HideContents(); |
| 998 } | 1014 } |
| 999 if (profile_->HasSessionService()) { | 1015 if (profile_->HasSessionService()) { |
| 1000 SessionService* session_service = profile_->GetSessionService(); | 1016 SessionService* session_service = profile_->GetSessionService(); |
| 1001 if (session_service) | 1017 if (session_service) |
| 1002 session_service->TabRestored(&new_tab->controller(), really_pin); | 1018 session_service->TabRestored(&new_tab->controller(), really_pin); |
| 1003 } | 1019 } |
| 1004 return new_tab; | 1020 return new_tab; |
| 1005 } | 1021 } |
| 1006 | 1022 |
| 1007 void Browser::ReplaceRestoredTab( | 1023 void Browser::ReplaceRestoredTab( |
| 1008 const std::vector<TabNavigation>& navigations, | 1024 const std::vector<TabNavigation>& navigations, |
| 1009 int selected_navigation, | 1025 int selected_navigation, |
| 1010 bool from_last_session, | 1026 bool from_last_session, |
| 1011 const std::string& extension_app_id, | 1027 const std::string& extension_app_id, |
| 1012 SessionStorageNamespace* session_storage_namespace) { | 1028 SessionStorageNamespace* session_storage_namespace) { |
| 1013 TabContents* replacement = new TabContents(profile(), NULL, | 1029 TabContentsWrapper* wrapper = TabContentsFactory(profile(), NULL, |
| 1014 MSG_ROUTING_NONE, | 1030 MSG_ROUTING_NONE, |
| 1015 tab_handler_->GetTabStripModel()->GetSelectedTabContents(), | 1031 GetSelectedTabContents(), |
| 1016 session_storage_namespace); | 1032 session_storage_namespace); |
| 1033 TabContents* replacement = wrapper->tab_contents(); |
| 1017 replacement->SetExtensionAppById(extension_app_id); | 1034 replacement->SetExtensionAppById(extension_app_id); |
| 1018 replacement->controller().RestoreFromState(navigations, selected_navigation, | 1035 replacement->controller().RestoreFromState(navigations, selected_navigation, |
| 1019 from_last_session); | 1036 from_last_session); |
| 1020 | 1037 |
| 1021 tab_handler_->GetTabStripModel()->ReplaceNavigationControllerAt( | 1038 tab_handler_->GetTabStripModel()->ReplaceNavigationControllerAt( |
| 1022 tab_handler_->GetTabStripModel()->selected_index(), | 1039 tab_handler_->GetTabStripModel()->selected_index(), |
| 1023 &replacement->controller()); | 1040 wrapper); |
| 1024 } | 1041 } |
| 1025 | 1042 |
| 1026 bool Browser::CanRestoreTab() { | 1043 bool Browser::CanRestoreTab() { |
| 1027 return command_updater_.IsCommandEnabled(IDC_RESTORE_TAB); | 1044 return command_updater_.IsCommandEnabled(IDC_RESTORE_TAB); |
| 1028 } | 1045 } |
| 1029 | 1046 |
| 1030 bool Browser::NavigateToIndexWithDisposition(int index, | 1047 bool Browser::NavigateToIndexWithDisposition(int index, |
| 1031 WindowOpenDisposition disp) { | 1048 WindowOpenDisposition disp) { |
| 1032 NavigationController& controller = | 1049 NavigationController& controller = |
| 1033 GetOrCloneTabForDisposition(disp)->controller(); | 1050 GetOrCloneTabForDisposition(disp)->controller(); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1103 // Browser, Assorted browser commands: | 1120 // Browser, Assorted browser commands: |
| 1104 | 1121 |
| 1105 bool Browser::ShouldOpenNewTabForWindowDisposition( | 1122 bool Browser::ShouldOpenNewTabForWindowDisposition( |
| 1106 WindowOpenDisposition disposition) { | 1123 WindowOpenDisposition disposition) { |
| 1107 return (disposition == NEW_FOREGROUND_TAB || | 1124 return (disposition == NEW_FOREGROUND_TAB || |
| 1108 disposition == NEW_BACKGROUND_TAB); | 1125 disposition == NEW_BACKGROUND_TAB); |
| 1109 } | 1126 } |
| 1110 | 1127 |
| 1111 TabContents* Browser::GetOrCloneTabForDisposition( | 1128 TabContents* Browser::GetOrCloneTabForDisposition( |
| 1112 WindowOpenDisposition disposition) { | 1129 WindowOpenDisposition disposition) { |
| 1113 TabContents* current_tab = GetSelectedTabContents(); | 1130 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
| 1114 if (ShouldOpenNewTabForWindowDisposition(disposition)) { | 1131 if (ShouldOpenNewTabForWindowDisposition(disposition)) { |
| 1115 current_tab = current_tab->Clone(); | 1132 current_tab = current_tab->Clone(); |
| 1116 tab_handler_->GetTabStripModel()->AddTabContents( | 1133 tab_handler_->GetTabStripModel()->AddTabContents( |
| 1117 current_tab, -1, PageTransition::LINK, | 1134 current_tab, -1, PageTransition::LINK, |
| 1118 disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_SELECTED : | 1135 disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_SELECTED : |
| 1119 TabStripModel::ADD_NONE); | 1136 TabStripModel::ADD_NONE); |
| 1120 } | 1137 } |
| 1121 return current_tab; | 1138 return current_tab->tab_contents(); |
| 1122 } | 1139 } |
| 1123 | 1140 |
| 1124 void Browser::UpdateTabStripModelInsertionPolicy() { | 1141 void Browser::UpdateTabStripModelInsertionPolicy() { |
| 1125 tab_handler_->GetTabStripModel()->SetInsertionPolicy(UseVerticalTabs() ? | 1142 tab_handler_->GetTabStripModel()->SetInsertionPolicy(UseVerticalTabs() ? |
| 1126 TabStripModel::INSERT_BEFORE : TabStripModel::INSERT_AFTER); | 1143 TabStripModel::INSERT_BEFORE : TabStripModel::INSERT_AFTER); |
| 1127 } | 1144 } |
| 1128 | 1145 |
| 1129 void Browser::UseVerticalTabsChanged() { | 1146 void Browser::UseVerticalTabsChanged() { |
| 1130 UpdateTabStripModelInsertionPolicy(); | 1147 UpdateTabStripModelInsertionPolicy(); |
| 1131 window()->ToggleTabStripMode(); | 1148 window()->ToggleTabStripMode(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1174 g_browser_process->tab_closeable_state_watcher(); | 1191 g_browser_process->tab_closeable_state_watcher(); |
| 1175 bool can_close = !watcher || watcher->CanCloseBrowser(this); | 1192 bool can_close = !watcher || watcher->CanCloseBrowser(this); |
| 1176 if (!can_close && is_attempting_to_close_browser_) | 1193 if (!can_close && is_attempting_to_close_browser_) |
| 1177 CancelWindowClose(); | 1194 CancelWindowClose(); |
| 1178 return can_close; | 1195 return can_close; |
| 1179 } | 1196 } |
| 1180 | 1197 |
| 1181 void Browser::GoBack(WindowOpenDisposition disposition) { | 1198 void Browser::GoBack(WindowOpenDisposition disposition) { |
| 1182 UserMetrics::RecordAction(UserMetricsAction("Back"), profile_); | 1199 UserMetrics::RecordAction(UserMetricsAction("Back"), profile_); |
| 1183 | 1200 |
| 1184 TabContents* current_tab = GetSelectedTabContents(); | 1201 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
| 1185 if (current_tab->controller().CanGoBack()) { | 1202 if (current_tab->controller().CanGoBack()) { |
| 1186 TabContents* new_tab = GetOrCloneTabForDisposition(disposition); | 1203 TabContents* new_tab = GetOrCloneTabForDisposition(disposition); |
| 1187 // If we are on an interstitial page and clone the tab, it won't be copied | 1204 // If we are on an interstitial page and clone the tab, it won't be copied |
| 1188 // to the new tab, so we don't need to go back. | 1205 // to the new tab, so we don't need to go back. |
| 1189 if (current_tab->showing_interstitial_page() && (new_tab != current_tab)) | 1206 if (current_tab->tab_contents()->showing_interstitial_page() && |
| 1207 (new_tab != current_tab->tab_contents())) |
| 1190 return; | 1208 return; |
| 1191 new_tab->controller().GoBack(); | 1209 new_tab->controller().GoBack(); |
| 1192 } | 1210 } |
| 1193 } | 1211 } |
| 1194 | 1212 |
| 1195 void Browser::GoForward(WindowOpenDisposition disposition) { | 1213 void Browser::GoForward(WindowOpenDisposition disposition) { |
| 1196 UserMetrics::RecordAction(UserMetricsAction("Forward"), profile_); | 1214 UserMetrics::RecordAction(UserMetricsAction("Forward"), profile_); |
| 1197 if (GetSelectedTabContents()->controller().CanGoForward()) | 1215 if (GetSelectedTabContentsWrapper()->controller().CanGoForward()) |
| 1198 GetOrCloneTabForDisposition(disposition)->controller().GoForward(); | 1216 GetOrCloneTabForDisposition(disposition)->controller().GoForward(); |
| 1199 } | 1217 } |
| 1200 | 1218 |
| 1201 void Browser::Reload(WindowOpenDisposition disposition) { | 1219 void Browser::Reload(WindowOpenDisposition disposition) { |
| 1202 UserMetrics::RecordAction(UserMetricsAction("Reload"), profile_); | 1220 UserMetrics::RecordAction(UserMetricsAction("Reload"), profile_); |
| 1203 ReloadInternal(disposition, false); | 1221 ReloadInternal(disposition, false); |
| 1204 } | 1222 } |
| 1205 | 1223 |
| 1206 void Browser::ReloadIgnoringCache(WindowOpenDisposition disposition) { | 1224 void Browser::ReloadIgnoringCache(WindowOpenDisposition disposition) { |
| 1207 UserMetrics::RecordAction(UserMetricsAction("ReloadIgnoringCache"), profile_); | 1225 UserMetrics::RecordAction(UserMetricsAction("ReloadIgnoringCache"), profile_); |
| 1208 ReloadInternal(disposition, true); | 1226 ReloadInternal(disposition, true); |
| 1209 } | 1227 } |
| 1210 | 1228 |
| 1211 void Browser::ReloadInternal(WindowOpenDisposition disposition, | 1229 void Browser::ReloadInternal(WindowOpenDisposition disposition, |
| 1212 bool ignore_cache) { | 1230 bool ignore_cache) { |
| 1213 // If we are showing an interstitial, treat this as an OpenURL. | 1231 // If we are showing an interstitial, treat this as an OpenURL. |
| 1214 TabContents* current_tab = GetSelectedTabContents(); | 1232 TabContents* current_tab = GetSelectedTabContents(); |
| 1215 if (current_tab && current_tab->showing_interstitial_page()) { | 1233 if (current_tab && current_tab->showing_interstitial_page()) { |
| 1216 NavigationEntry* entry = current_tab->controller().GetActiveEntry(); | 1234 NavigationEntry* entry = current_tab->controller().GetActiveEntry(); |
| 1217 DCHECK(entry); // Should exist if interstitial is showing. | 1235 DCHECK(entry); // Should exist if interstitial is showing. |
| 1218 OpenURL(entry->url(), GURL(), disposition, PageTransition::RELOAD); | 1236 OpenURL(entry->url(), GURL(), disposition, PageTransition::RELOAD); |
| 1219 return; | 1237 return; |
| 1220 } | 1238 } |
| 1221 | 1239 |
| 1222 // As this is caused by a user action, give the focus to the page. | 1240 // As this is caused by a user action, give the focus to the page. |
| 1223 current_tab = GetOrCloneTabForDisposition(disposition); | 1241 TabContents* tab = GetOrCloneTabForDisposition(disposition); |
| 1224 if (!current_tab->FocusLocationBarByDefault()) | 1242 if (!tab->FocusLocationBarByDefault()) |
| 1225 current_tab->Focus(); | 1243 tab->Focus(); |
| 1226 if (ignore_cache) | 1244 if (ignore_cache) |
| 1227 current_tab->controller().ReloadIgnoringCache(true); | 1245 tab->controller().ReloadIgnoringCache(true); |
| 1228 else | 1246 else |
| 1229 current_tab->controller().Reload(true); | 1247 tab->controller().Reload(true); |
| 1230 } | 1248 } |
| 1231 | 1249 |
| 1232 void Browser::Home(WindowOpenDisposition disposition) { | 1250 void Browser::Home(WindowOpenDisposition disposition) { |
| 1233 UserMetrics::RecordAction(UserMetricsAction("Home"), profile_); | 1251 UserMetrics::RecordAction(UserMetricsAction("Home"), profile_); |
| 1234 OpenURL(GetHomePage(), GURL(), disposition, PageTransition::AUTO_BOOKMARK); | 1252 OpenURL(GetHomePage(), GURL(), disposition, PageTransition::AUTO_BOOKMARK); |
| 1235 } | 1253 } |
| 1236 | 1254 |
| 1237 void Browser::OpenCurrentURL() { | 1255 void Browser::OpenCurrentURL() { |
| 1238 UserMetrics::RecordAction(UserMetricsAction("LoadURL"), profile_); | 1256 UserMetrics::RecordAction(UserMetricsAction("LoadURL"), profile_); |
| 1239 LocationBar* location_bar = window_->GetLocationBar(); | 1257 LocationBar* location_bar = window_->GetLocationBar(); |
| 1240 WindowOpenDisposition open_disposition = | 1258 WindowOpenDisposition open_disposition = |
| 1241 location_bar->GetWindowOpenDisposition(); | 1259 location_bar->GetWindowOpenDisposition(); |
| 1242 if (OpenInstant(open_disposition)) | 1260 if (OpenInstant(open_disposition)) |
| 1243 return; | 1261 return; |
| 1244 | 1262 |
| 1245 GURL url(WideToUTF8(location_bar->GetInputString())); | 1263 GURL url(WideToUTF8(location_bar->GetInputString())); |
| 1246 browser::NavigateParams params(this, url, location_bar->GetPageTransition()); | 1264 browser::NavigateParams params(this, url, location_bar->GetPageTransition()); |
| 1247 params.disposition = open_disposition; | 1265 params.disposition = open_disposition; |
| 1248 // Use ADD_INHERIT_OPENER so that all pages opened by the omnibox at least | 1266 // Use ADD_INHERIT_OPENER so that all pages opened by the omnibox at least |
| 1249 // inherit the opener. In some cases the tabstrip will determine the group | 1267 // inherit the opener. In some cases the tabstrip will determine the group |
| 1250 // should be inherited, in which case the group is inherited instead of the | 1268 // should be inherited, in which case the group is inherited instead of the |
| 1251 // opener. | 1269 // opener. |
| 1252 params.tabstrip_add_types = | 1270 params.tabstrip_add_types = |
| 1253 TabStripModel::ADD_FORCE_INDEX | TabStripModel::ADD_INHERIT_OPENER; | 1271 TabStripModel::ADD_FORCE_INDEX | TabStripModel::ADD_INHERIT_OPENER; |
| 1254 browser::Navigate(¶ms); | 1272 browser::Navigate(¶ms); |
| 1255 } | 1273 } |
| 1256 | 1274 |
| 1257 void Browser::Stop() { | 1275 void Browser::Stop() { |
| 1258 UserMetrics::RecordAction(UserMetricsAction("Stop"), profile_); | 1276 UserMetrics::RecordAction(UserMetricsAction("Stop"), profile_); |
| 1259 GetSelectedTabContents()->Stop(); | 1277 GetSelectedTabContentsWrapper()->tab_contents()->Stop(); |
| 1260 } | 1278 } |
| 1261 | 1279 |
| 1262 void Browser::NewWindow() { | 1280 void Browser::NewWindow() { |
| 1263 if (browser_defaults::kAlwaysOpenIncognitoWindow && | 1281 if (browser_defaults::kAlwaysOpenIncognitoWindow && |
| 1264 CommandLine::ForCurrentProcess()->HasSwitch(switches::kIncognito)) { | 1282 CommandLine::ForCurrentProcess()->HasSwitch(switches::kIncognito)) { |
| 1265 NewIncognitoWindow(); | 1283 NewIncognitoWindow(); |
| 1266 return; | 1284 return; |
| 1267 } | 1285 } |
| 1268 UserMetrics::RecordAction(UserMetricsAction("NewWindow"), profile_); | 1286 UserMetrics::RecordAction(UserMetricsAction("NewWindow"), profile_); |
| 1269 SessionService* session_service = | 1287 SessionService* session_service = |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1289 | 1307 |
| 1290 if (type() == TYPE_NORMAL) { | 1308 if (type() == TYPE_NORMAL) { |
| 1291 AddBlankTab(true); | 1309 AddBlankTab(true); |
| 1292 } else { | 1310 } else { |
| 1293 Browser* b = GetOrCreateTabbedBrowser(profile_); | 1311 Browser* b = GetOrCreateTabbedBrowser(profile_); |
| 1294 b->AddBlankTab(true); | 1312 b->AddBlankTab(true); |
| 1295 b->window()->Show(); | 1313 b->window()->Show(); |
| 1296 // The call to AddBlankTab above did not set the focus to the tab as its | 1314 // The call to AddBlankTab above did not set the focus to the tab as its |
| 1297 // window was not active, so we have to do it explicitly. | 1315 // window was not active, so we have to do it explicitly. |
| 1298 // See http://crbug.com/6380. | 1316 // See http://crbug.com/6380. |
| 1299 b->GetSelectedTabContents()->view()->RestoreFocus(); | 1317 b->GetSelectedTabContentsWrapper()->view()->RestoreFocus(); |
| 1300 } | 1318 } |
| 1301 } | 1319 } |
| 1302 | 1320 |
| 1303 void Browser::CloseTab() { | 1321 void Browser::CloseTab() { |
| 1304 UserMetrics::RecordAction(UserMetricsAction("CloseTab_Accelerator"), | 1322 UserMetrics::RecordAction(UserMetricsAction("CloseTab_Accelerator"), |
| 1305 profile_); | 1323 profile_); |
| 1306 if (CanCloseTab()) { | 1324 if (CanCloseTab()) { |
| 1307 tab_handler_->GetTabStripModel()->CloseTabContentsAt( | 1325 tab_handler_->GetTabStripModel()->CloseTabContentsAt( |
| 1308 tab_handler_->GetTabStripModel()->selected_index(), | 1326 tab_handler_->GetTabStripModel()->selected_index(), |
| 1309 TabStripModel::CLOSE_USER_GESTURE | | 1327 TabStripModel::CLOSE_USER_GESTURE | |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1383 | 1401 |
| 1384 chrome_browser_net::WriteURLToClipboard( | 1402 chrome_browser_net::WriteURLToClipboard( |
| 1385 contents->GetURL(), | 1403 contents->GetURL(), |
| 1386 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), | 1404 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), |
| 1387 g_browser_process->clipboard()); | 1405 g_browser_process->clipboard()); |
| 1388 } | 1406 } |
| 1389 | 1407 |
| 1390 void Browser::ConvertPopupToTabbedBrowser() { | 1408 void Browser::ConvertPopupToTabbedBrowser() { |
| 1391 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab"), profile_); | 1409 UserMetrics::RecordAction(UserMetricsAction("ShowAsTab"), profile_); |
| 1392 int tab_strip_index = tab_handler_->GetTabStripModel()->selected_index(); | 1410 int tab_strip_index = tab_handler_->GetTabStripModel()->selected_index(); |
| 1393 TabContents* contents = | 1411 TabContentsWrapper* contents = |
| 1394 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); | 1412 tab_handler_->GetTabStripModel()->DetachTabContentsAt(tab_strip_index); |
| 1395 Browser* browser = Browser::Create(profile_); | 1413 Browser* browser = Browser::Create(profile_); |
| 1396 browser->tabstrip_model()->AppendTabContents(contents, true); | 1414 browser->tabstrip_model()->AppendTabContents(contents, true); |
| 1397 browser->window()->Show(); | 1415 browser->window()->Show(); |
| 1398 } | 1416 } |
| 1399 | 1417 |
| 1400 void Browser::ToggleFullscreenMode() { | 1418 void Browser::ToggleFullscreenMode() { |
| 1401 #if !defined(OS_MACOSX) | 1419 #if !defined(OS_MACOSX) |
| 1402 // In kiosk mode, we always want to be fullscreen. When the browser first | 1420 // In kiosk mode, we always want to be fullscreen. When the browser first |
| 1403 // starts we're not yet fullscreen, so let the initial toggle go through. | 1421 // starts we're not yet fullscreen, so let the initial toggle go through. |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1579 | 1597 |
| 1580 void Browser::Zoom(PageZoom::Function zoom_function) { | 1598 void Browser::Zoom(PageZoom::Function zoom_function) { |
| 1581 static const UserMetricsAction kActions[] = { | 1599 static const UserMetricsAction kActions[] = { |
| 1582 UserMetricsAction("ZoomMinus"), | 1600 UserMetricsAction("ZoomMinus"), |
| 1583 UserMetricsAction("ZoomNormal"), | 1601 UserMetricsAction("ZoomNormal"), |
| 1584 UserMetricsAction("ZoomPlus") | 1602 UserMetricsAction("ZoomPlus") |
| 1585 }; | 1603 }; |
| 1586 | 1604 |
| 1587 UserMetrics::RecordAction(kActions[zoom_function - PageZoom::ZOOM_OUT], | 1605 UserMetrics::RecordAction(kActions[zoom_function - PageZoom::ZOOM_OUT], |
| 1588 profile_); | 1606 profile_); |
| 1589 TabContents* tab_contents = GetSelectedTabContents(); | 1607 TabContentsWrapper* tab_contents = GetSelectedTabContentsWrapper(); |
| 1590 tab_contents->render_view_host()->Zoom(zoom_function); | 1608 tab_contents->render_view_host()->Zoom(zoom_function); |
| 1591 } | 1609 } |
| 1592 | 1610 |
| 1593 void Browser::FocusToolbar() { | 1611 void Browser::FocusToolbar() { |
| 1594 UserMetrics::RecordAction(UserMetricsAction("FocusToolbar"), profile_); | 1612 UserMetrics::RecordAction(UserMetricsAction("FocusToolbar"), profile_); |
| 1595 window_->FocusToolbar(); | 1613 window_->FocusToolbar(); |
| 1596 } | 1614 } |
| 1597 | 1615 |
| 1598 void Browser::FocusAppMenu() { | 1616 void Browser::FocusAppMenu() { |
| 1599 UserMetrics::RecordAction(UserMetricsAction("FocusAppMenu"), profile_); | 1617 UserMetrics::RecordAction(UserMetricsAction("FocusAppMenu"), profile_); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1650 select_file_dialog_->SelectFile(SelectFileDialog::SELECT_OPEN_FILE, | 1668 select_file_dialog_->SelectFile(SelectFileDialog::SELECT_OPEN_FILE, |
| 1651 string16(), directory, | 1669 string16(), directory, |
| 1652 NULL, 0, FILE_PATH_LITERAL(""), | 1670 NULL, 0, FILE_PATH_LITERAL(""), |
| 1653 parent_window, NULL); | 1671 parent_window, NULL); |
| 1654 #endif | 1672 #endif |
| 1655 } | 1673 } |
| 1656 | 1674 |
| 1657 void Browser::OpenCreateShortcutsDialog() { | 1675 void Browser::OpenCreateShortcutsDialog() { |
| 1658 UserMetrics::RecordAction(UserMetricsAction("CreateShortcut"), profile_); | 1676 UserMetrics::RecordAction(UserMetricsAction("CreateShortcut"), profile_); |
| 1659 #if defined(OS_WIN) || defined(OS_LINUX) | 1677 #if defined(OS_WIN) || defined(OS_LINUX) |
| 1660 TabContents* current_tab = GetSelectedTabContents(); | 1678 TabContentsWrapper* current_tab = GetSelectedTabContentsWrapper(); |
| 1661 DCHECK(current_tab && web_app::IsValidUrl(current_tab->GetURL())) << | 1679 DCHECK(current_tab && |
| 1662 "Menu item should be disabled."; | 1680 web_app::IsValidUrl(current_tab->tab_contents()->GetURL())) << |
| 1681 "Menu item should be disabled."; |
| 1663 | 1682 |
| 1664 NavigationEntry* entry = current_tab->controller().GetLastCommittedEntry(); | 1683 NavigationEntry* entry = current_tab->controller().GetLastCommittedEntry(); |
| 1665 if (!entry) | 1684 if (!entry) |
| 1666 return; | 1685 return; |
| 1667 | 1686 |
| 1668 // RVH's GetApplicationInfo should not be called before it returns. | 1687 // RVH's GetApplicationInfo should not be called before it returns. |
| 1669 DCHECK(pending_web_app_action_ == NONE); | 1688 DCHECK(pending_web_app_action_ == NONE); |
| 1670 pending_web_app_action_ = CREATE_SHORTCUT; | 1689 pending_web_app_action_ = CREATE_SHORTCUT; |
| 1671 | 1690 |
| 1672 // Start fetching web app info for CreateApplicationShortcut dialog and show | 1691 // Start fetching web app info for CreateApplicationShortcut dialog and show |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1684 uma_string = "DevTools_ToggleConsole"; | 1703 uma_string = "DevTools_ToggleConsole"; |
| 1685 break; | 1704 break; |
| 1686 case DEVTOOLS_TOGGLE_ACTION_NONE: | 1705 case DEVTOOLS_TOGGLE_ACTION_NONE: |
| 1687 case DEVTOOLS_TOGGLE_ACTION_INSPECT: | 1706 case DEVTOOLS_TOGGLE_ACTION_INSPECT: |
| 1688 default: | 1707 default: |
| 1689 uma_string = "DevTools_ToggleWindow"; | 1708 uma_string = "DevTools_ToggleWindow"; |
| 1690 break; | 1709 break; |
| 1691 } | 1710 } |
| 1692 UserMetrics::RecordAction(UserMetricsAction(uma_string.c_str()), profile_); | 1711 UserMetrics::RecordAction(UserMetricsAction(uma_string.c_str()), profile_); |
| 1693 DevToolsManager::GetInstance()->ToggleDevToolsWindow( | 1712 DevToolsManager::GetInstance()->ToggleDevToolsWindow( |
| 1694 GetSelectedTabContents()->render_view_host(), action); | 1713 GetSelectedTabContentsWrapper()->render_view_host(), action); |
| 1695 } | 1714 } |
| 1696 | 1715 |
| 1697 void Browser::OpenTaskManager() { | 1716 void Browser::OpenTaskManager() { |
| 1698 UserMetrics::RecordAction(UserMetricsAction("TaskManager"), profile_); | 1717 UserMetrics::RecordAction(UserMetricsAction("TaskManager"), profile_); |
| 1699 window_->ShowTaskManager(); | 1718 window_->ShowTaskManager(); |
| 1700 } | 1719 } |
| 1701 | 1720 |
| 1702 void Browser::OpenBugReportDialog() { | 1721 void Browser::OpenBugReportDialog() { |
| 1703 UserMetrics::RecordAction(UserMetricsAction("ReportBug"), profile_); | 1722 UserMetrics::RecordAction(UserMetricsAction("ReportBug"), profile_); |
| 1704 window_->ShowReportBugDialog(); | 1723 window_->ShowReportBugDialog(); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1758 ReplaceStringPlaceholders(kBrokenPageUrl, subst, NULL); | 1777 ReplaceStringPlaceholders(kBrokenPageUrl, subst, NULL); |
| 1759 ShowSingletonTab(GURL(report_page_url)); | 1778 ShowSingletonTab(GURL(report_page_url)); |
| 1760 } | 1779 } |
| 1761 | 1780 |
| 1762 void Browser::ShowOptionsTab(const std::string& sub_page) { | 1781 void Browser::ShowOptionsTab(const std::string& sub_page) { |
| 1763 GURL url(chrome::kChromeUISettingsURL + sub_page); | 1782 GURL url(chrome::kChromeUISettingsURL + sub_page); |
| 1764 | 1783 |
| 1765 // See if there is already an options tab open that we can use. | 1784 // See if there is already an options tab open that we can use. |
| 1766 TabStripModel* model = tab_handler_->GetTabStripModel(); | 1785 TabStripModel* model = tab_handler_->GetTabStripModel(); |
| 1767 for (int i = 0; i < model->count(); i++) { | 1786 for (int i = 0; i < model->count(); i++) { |
| 1768 TabContents* tc = model->GetTabContentsAt(i); | 1787 TabContentsWrapper* tc = model->GetTabContentsAt(i); |
| 1769 const GURL& tab_url = tc->GetURL(); | 1788 const GURL& tab_url = tc->tab_contents()->GetURL(); |
| 1770 | 1789 |
| 1771 if (tab_url.scheme() == url.scheme() && tab_url.host() == url.host()) { | 1790 if (tab_url.scheme() == url.scheme() && tab_url.host() == url.host()) { |
| 1772 // We found an existing options tab, load the URL in this tab. (Note: | 1791 // We found an existing options tab, load the URL in this tab. (Note: |
| 1773 // this may cause us to unnecessarily reload the same page. We can't | 1792 // this may cause us to unnecessarily reload the same page. We can't |
| 1774 // really detect that unless the options page is permitted to change the | 1793 // really detect that unless the options page is permitted to change the |
| 1775 // URL in the address bar, but security policy doesn't allow that. | 1794 // URL in the address bar, but security policy doesn't allow that. |
| 1776 browser::NavigateParams params(this, url, PageTransition::GENERATED); | 1795 browser::NavigateParams params(this, url, PageTransition::GENERATED); |
| 1777 params.source_contents = tc; | 1796 params.source_contents = tc; |
| 1778 browser::Navigate(¶ms); | 1797 browser::Navigate(¶ms); |
| 1779 model->SelectTabContentsAt(i, false); | 1798 model->SelectTabContentsAt(i, false); |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2056 | 2075 |
| 2057 void Browser::ExecuteCommandWithDisposition( | 2076 void Browser::ExecuteCommandWithDisposition( |
| 2058 int id, WindowOpenDisposition disposition) { | 2077 int id, WindowOpenDisposition disposition) { |
| 2059 // No commands are enabled if there is not yet any selected tab. | 2078 // No commands are enabled if there is not yet any selected tab. |
| 2060 // TODO(pkasting): It seems like we should not need this, because either | 2079 // TODO(pkasting): It seems like we should not need this, because either |
| 2061 // most/all commands should not have been enabled yet anyway or the ones that | 2080 // most/all commands should not have been enabled yet anyway or the ones that |
| 2062 // are enabled should be global, or safe themselves against having no selected | 2081 // are enabled should be global, or safe themselves against having no selected |
| 2063 // tab. However, Ben says he tried removing this before and got lots of | 2082 // tab. However, Ben says he tried removing this before and got lots of |
| 2064 // crashes, e.g. from Windows sending WM_COMMANDs at random times during | 2083 // crashes, e.g. from Windows sending WM_COMMANDs at random times during |
| 2065 // window construction. This probably could use closer examination someday. | 2084 // window construction. This probably could use closer examination someday. |
| 2066 if (!GetSelectedTabContents()) | 2085 if (!GetSelectedTabContentsWrapper()) |
| 2067 return; | 2086 return; |
| 2068 | 2087 |
| 2069 DCHECK(command_updater_.IsCommandEnabled(id)) << "Invalid/disabled command"; | 2088 DCHECK(command_updater_.IsCommandEnabled(id)) << "Invalid/disabled command"; |
| 2070 | 2089 |
| 2071 // If command execution is blocked then just record the command and return. | 2090 // If command execution is blocked then just record the command and return. |
| 2072 if (block_command_execution_) { | 2091 if (block_command_execution_) { |
| 2073 // We actually only allow no more than one blocked command, otherwise some | 2092 // We actually only allow no more than one blocked command, otherwise some |
| 2074 // commands maybe lost. | 2093 // commands maybe lost. |
| 2075 DCHECK_EQ(last_blocked_command_id_, -1); | 2094 DCHECK_EQ(last_blocked_command_id_, -1); |
| 2076 last_blocked_command_id_ = id; | 2095 last_blocked_command_id_ = id; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2261 last_blocked_command_disposition_ = CURRENT_TAB; | 2280 last_blocked_command_disposition_ = CURRENT_TAB; |
| 2262 } | 2281 } |
| 2263 } | 2282 } |
| 2264 | 2283 |
| 2265 int Browser::GetLastBlockedCommand(WindowOpenDisposition* disposition) { | 2284 int Browser::GetLastBlockedCommand(WindowOpenDisposition* disposition) { |
| 2266 if (disposition) | 2285 if (disposition) |
| 2267 *disposition = last_blocked_command_disposition_; | 2286 *disposition = last_blocked_command_disposition_; |
| 2268 return last_blocked_command_id_; | 2287 return last_blocked_command_id_; |
| 2269 } | 2288 } |
| 2270 | 2289 |
| 2271 void Browser::UpdateUIForNavigationInTab(TabContents* contents, | 2290 void Browser::UpdateUIForNavigationInTab(TabContentsWrapper* contents, |
| 2272 PageTransition::Type transition, | 2291 PageTransition::Type transition, |
| 2273 bool user_initiated) { | 2292 bool user_initiated) { |
| 2274 tabstrip_model()->TabNavigating(contents, transition); | 2293 tabstrip_model()->TabNavigating(contents, transition); |
| 2275 | 2294 |
| 2276 bool contents_is_selected = contents == GetSelectedTabContents(); | 2295 bool contents_is_selected = contents == GetSelectedTabContentsWrapper(); |
| 2277 if (user_initiated && contents_is_selected && window()->GetLocationBar()) { | 2296 if (user_initiated && contents_is_selected && window()->GetLocationBar()) { |
| 2278 // Forcibly reset the location bar if the url is going to change in the | 2297 // Forcibly reset the location bar if the url is going to change in the |
| 2279 // current tab, since otherwise it won't discard any ongoing user edits, | 2298 // current tab, since otherwise it won't discard any ongoing user edits, |
| 2280 // since it doesn't realize this is a user-initiated action. | 2299 // since it doesn't realize this is a user-initiated action. |
| 2281 window()->GetLocationBar()->Revert(); | 2300 window()->GetLocationBar()->Revert(); |
| 2282 } | 2301 } |
| 2283 | 2302 |
| 2284 if (GetStatusBubble()) | 2303 if (GetStatusBubble()) |
| 2285 GetStatusBubble()->Hide(); | 2304 GetStatusBubble()->Hide(); |
| 2286 | 2305 |
| 2287 // Update the location bar. This is synchronous. We specifically don't | 2306 // Update the location bar. This is synchronous. We specifically don't |
| 2288 // update the load state since the load hasn't started yet and updating it | 2307 // update the load state since the load hasn't started yet and updating it |
| 2289 // will put it out of sync with the actual state like whether we're | 2308 // will put it out of sync with the actual state like whether we're |
| 2290 // displaying a favicon, which controls the throbber. If we updated it here, | 2309 // displaying a favicon, which controls the throbber. If we updated it here, |
| 2291 // the throbber will show the default favicon for a split second when | 2310 // the throbber will show the default favicon for a split second when |
| 2292 // navigating away from the new tab page. | 2311 // navigating away from the new tab page. |
| 2293 ScheduleUIUpdate(contents, TabContents::INVALIDATE_URL); | 2312 ScheduleUIUpdate(contents->tab_contents(), TabContents::INVALIDATE_URL); |
| 2294 | 2313 |
| 2295 if (contents_is_selected) | 2314 if (contents_is_selected) |
| 2296 contents->Focus(); | 2315 contents->tab_contents()->Focus(); |
| 2297 } | 2316 } |
| 2298 | 2317 |
| 2299 GURL Browser::GetHomePage() const { | 2318 GURL Browser::GetHomePage() const { |
| 2300 // --homepage overrides any preferences. | 2319 // --homepage overrides any preferences. |
| 2301 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 2320 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 2302 if (command_line.HasSwitch(switches::kHomePage)) { | 2321 if (command_line.HasSwitch(switches::kHomePage)) { |
| 2303 // TODO(evanm): clean up usage of DIR_CURRENT. | 2322 // TODO(evanm): clean up usage of DIR_CURRENT. |
| 2304 // http://code.google.com/p/chromium/issues/detail?id=60630 | 2323 // http://code.google.com/p/chromium/issues/detail?id=60630 |
| 2305 // For now, allow this code to call getcwd(). | 2324 // For now, allow this code to call getcwd(). |
| 2306 base::ThreadRestrictions::ScopedAllowIO allow_io; | 2325 base::ThreadRestrictions::ScopedAllowIO allow_io; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2346 return profile(); | 2365 return profile(); |
| 2347 } | 2366 } |
| 2348 | 2367 |
| 2349 Browser* Browser::AsBrowser() { | 2368 Browser* Browser::AsBrowser() { |
| 2350 return this; | 2369 return this; |
| 2351 } | 2370 } |
| 2352 | 2371 |
| 2353 /////////////////////////////////////////////////////////////////////////////// | 2372 /////////////////////////////////////////////////////////////////////////////// |
| 2354 // Browser, TabStripModelDelegate implementation: | 2373 // Browser, TabStripModelDelegate implementation: |
| 2355 | 2374 |
| 2356 TabContents* Browser::AddBlankTab(bool foreground) { | 2375 TabContentsWrapper* Browser::AddBlankTab(bool foreground) { |
| 2357 return AddBlankTabAt(-1, foreground); | 2376 return AddBlankTabAt(-1, foreground); |
| 2358 } | 2377 } |
| 2359 | 2378 |
| 2360 TabContents* Browser::AddBlankTabAt(int index, bool foreground) { | 2379 TabContentsWrapper* Browser::AddBlankTabAt(int index, bool foreground) { |
| 2361 // Time new tab page creation time. We keep track of the timing data in | 2380 // Time new tab page creation time. We keep track of the timing data in |
| 2362 // TabContents, but we want to include the time it takes to create the | 2381 // TabContents, but we want to include the time it takes to create the |
| 2363 // TabContents object too. | 2382 // TabContents object too. |
| 2364 base::TimeTicks new_tab_start_time = base::TimeTicks::Now(); | 2383 base::TimeTicks new_tab_start_time = base::TimeTicks::Now(); |
| 2365 browser::NavigateParams params(this, GURL(chrome::kChromeUINewTabURL), | 2384 browser::NavigateParams params(this, GURL(chrome::kChromeUINewTabURL), |
| 2366 PageTransition::TYPED); | 2385 PageTransition::TYPED); |
| 2367 params.disposition = foreground ? NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB; | 2386 params.disposition = foreground ? NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB; |
| 2368 params.tabstrip_index = index; | 2387 params.tabstrip_index = index; |
| 2369 browser::Navigate(¶ms); | 2388 browser::Navigate(¶ms); |
| 2370 params.target_contents->set_new_tab_start_time(new_tab_start_time); | 2389 params.target_contents->tab_contents()->set_new_tab_start_time( |
| 2390 new_tab_start_time); |
| 2371 return params.target_contents; | 2391 return params.target_contents; |
| 2372 } | 2392 } |
| 2373 | 2393 |
| 2374 Browser* Browser::CreateNewStripWithContents(TabContents* detached_contents, | 2394 Browser* Browser::CreateNewStripWithContents( |
| 2375 const gfx::Rect& window_bounds, | 2395 TabContentsWrapper* detached_contents, |
| 2376 const DockInfo& dock_info, | 2396 const gfx::Rect& window_bounds, |
| 2377 bool maximize) { | 2397 const DockInfo& dock_info, |
| 2398 bool maximize) { |
| 2378 DCHECK(CanSupportWindowFeature(FEATURE_TABSTRIP)); | 2399 DCHECK(CanSupportWindowFeature(FEATURE_TABSTRIP)); |
| 2379 | 2400 |
| 2380 gfx::Rect new_window_bounds = window_bounds; | 2401 gfx::Rect new_window_bounds = window_bounds; |
| 2381 if (dock_info.GetNewWindowBounds(&new_window_bounds, &maximize)) | 2402 if (dock_info.GetNewWindowBounds(&new_window_bounds, &maximize)) |
| 2382 dock_info.AdjustOtherWindowBounds(); | 2403 dock_info.AdjustOtherWindowBounds(); |
| 2383 | 2404 |
| 2384 // Create an empty new browser window the same size as the old one. | 2405 // Create an empty new browser window the same size as the old one. |
| 2385 Browser* browser = new Browser(TYPE_NORMAL, profile_); | 2406 Browser* browser = new Browser(TYPE_NORMAL, profile_); |
| 2386 browser->set_override_bounds(new_window_bounds); | 2407 browser->set_override_bounds(new_window_bounds); |
| 2387 browser->set_maximized_state( | 2408 browser->set_maximized_state( |
| 2388 maximize ? MAXIMIZED_STATE_MAXIMIZED : MAXIMIZED_STATE_UNMAXIMIZED); | 2409 maximize ? MAXIMIZED_STATE_MAXIMIZED : MAXIMIZED_STATE_UNMAXIMIZED); |
| 2389 browser->CreateBrowserWindow(); | 2410 browser->CreateBrowserWindow(); |
| 2390 browser->tabstrip_model()->AppendTabContents(detached_contents, true); | 2411 browser->tabstrip_model()->AppendTabContents(detached_contents, true); |
| 2391 // Make sure the loading state is updated correctly, otherwise the throbber | 2412 // Make sure the loading state is updated correctly, otherwise the throbber |
| 2392 // won't start if the page is loading. | 2413 // won't start if the page is loading. |
| 2393 browser->LoadingStateChanged(detached_contents); | 2414 browser->LoadingStateChanged(detached_contents->tab_contents()); |
| 2394 return browser; | 2415 return browser; |
| 2395 } | 2416 } |
| 2396 | 2417 |
| 2397 void Browser::ContinueDraggingDetachedTab(TabContents* contents, | 2418 void Browser::ContinueDraggingDetachedTab(TabContentsWrapper* contents, |
| 2398 const gfx::Rect& window_bounds, | 2419 const gfx::Rect& window_bounds, |
| 2399 const gfx::Rect& tab_bounds) { | 2420 const gfx::Rect& tab_bounds) { |
| 2400 Browser* browser = new Browser(TYPE_NORMAL, profile_); | 2421 Browser* browser = new Browser(TYPE_NORMAL, profile_); |
| 2401 browser->set_override_bounds(window_bounds); | 2422 browser->set_override_bounds(window_bounds); |
| 2402 browser->CreateBrowserWindow(); | 2423 browser->CreateBrowserWindow(); |
| 2403 browser->tabstrip_model()->AppendTabContents(contents, true); | 2424 browser->tabstrip_model()->AppendTabContents(contents, true); |
| 2404 browser->LoadingStateChanged(contents); | 2425 browser->LoadingStateChanged(contents->tab_contents()); |
| 2405 browser->window()->Show(); | 2426 browser->window()->Show(); |
| 2406 browser->window()->ContinueDraggingDetachedTab(tab_bounds); | 2427 browser->window()->ContinueDraggingDetachedTab(tab_bounds); |
| 2407 } | 2428 } |
| 2408 | 2429 |
| 2409 int Browser::GetDragActions() const { | 2430 int Browser::GetDragActions() const { |
| 2410 return TabStripModelDelegate::TAB_TEAROFF_ACTION | (tab_count() > 1 ? | 2431 return TabStripModelDelegate::TAB_TEAROFF_ACTION | (tab_count() > 1 ? |
| 2411 TabStripModelDelegate::TAB_MOVE_ACTION : 0); | 2432 TabStripModelDelegate::TAB_MOVE_ACTION : 0); |
| 2412 } | 2433 } |
| 2413 | 2434 |
| 2414 TabContents* Browser::CreateTabContentsForURL( | 2435 TabContentsWrapper* Browser::CreateTabContentsForURL( |
| 2415 const GURL& url, const GURL& referrer, Profile* profile, | 2436 const GURL& url, const GURL& referrer, Profile* profile, |
| 2416 PageTransition::Type transition, bool defer_load, | 2437 PageTransition::Type transition, bool defer_load, |
| 2417 SiteInstance* instance) const { | 2438 SiteInstance* instance) const { |
| 2418 TabContents* contents = new TabContents(profile, instance, | 2439 TabContentsWrapper* contents = TabContentsFactory(profile, instance, |
| 2419 MSG_ROUTING_NONE, | 2440 MSG_ROUTING_NONE, |
| 2420 tab_handler_->GetTabStripModel()->GetSelectedTabContents(), NULL); | 2441 GetSelectedTabContents(), NULL); |
| 2421 | |
| 2422 if (!defer_load) { | 2442 if (!defer_load) { |
| 2423 // Load the initial URL before adding the new tab contents to the tab strip | 2443 // Load the initial URL before adding the new tab contents to the tab strip |
| 2424 // so that the tab contents has navigation state. | 2444 // so that the tab contents has navigation state. |
| 2425 contents->controller().LoadURL(url, referrer, transition); | 2445 contents->controller().LoadURL(url, referrer, transition); |
| 2426 } | 2446 } |
| 2427 | 2447 |
| 2428 return contents; | 2448 return contents; |
| 2429 } | 2449 } |
| 2430 | 2450 |
| 2431 bool Browser::CanDuplicateContentsAt(int index) { | 2451 bool Browser::CanDuplicateContentsAt(int index) { |
| 2432 NavigationController& nc = GetTabContentsAt(index)->controller(); | 2452 NavigationController& nc = GetTabContentsAt(index)->controller(); |
| 2433 return nc.tab_contents() && nc.GetLastCommittedEntry(); | 2453 return nc.tab_contents() && nc.GetLastCommittedEntry(); |
| 2434 } | 2454 } |
| 2435 | 2455 |
| 2436 void Browser::DuplicateContentsAt(int index) { | 2456 void Browser::DuplicateContentsAt(int index) { |
| 2437 TabContents* contents = GetTabContentsAt(index); | 2457 TabContentsWrapper* contents = GetTabContentsWrapperAt(index); |
| 2438 TabContents* new_contents = NULL; | 2458 TabContents* new_contents = NULL; |
| 2439 DCHECK(contents); | 2459 DCHECK(contents); |
| 2440 bool pinned = false; | 2460 bool pinned = false; |
| 2441 | 2461 |
| 2442 if (CanSupportWindowFeature(FEATURE_TABSTRIP)) { | 2462 if (CanSupportWindowFeature(FEATURE_TABSTRIP)) { |
| 2443 // If this is a tabbed browser, just create a duplicate tab inside the same | 2463 // If this is a tabbed browser, just create a duplicate tab inside the same |
| 2444 // window next to the tab being duplicated. | 2464 // window next to the tab being duplicated. |
| 2445 new_contents = contents->Clone(); | 2465 TabContentsWrapper* wrapper = contents->Clone(); |
| 2466 new_contents = wrapper->tab_contents(); |
| 2446 pinned = tab_handler_->GetTabStripModel()->IsTabPinned(index); | 2467 pinned = tab_handler_->GetTabStripModel()->IsTabPinned(index); |
| 2447 int add_types = TabStripModel::ADD_SELECTED | | 2468 int add_types = TabStripModel::ADD_SELECTED | |
| 2448 TabStripModel::ADD_INHERIT_GROUP | | 2469 TabStripModel::ADD_INHERIT_GROUP | |
| 2449 (pinned ? TabStripModel::ADD_PINNED : 0); | 2470 (pinned ? TabStripModel::ADD_PINNED : 0); |
| 2450 tab_handler_->GetTabStripModel()->InsertTabContentsAt(index + 1, | 2471 tab_handler_->GetTabStripModel()->InsertTabContentsAt(index + 1, |
| 2451 new_contents, | 2472 wrapper, |
| 2452 add_types); | 2473 add_types); |
| 2453 } else { | 2474 } else { |
| 2454 Browser* browser = NULL; | 2475 Browser* browser = NULL; |
| 2455 if (type_ & TYPE_APP) { | 2476 if (type_ & TYPE_APP) { |
| 2456 DCHECK((type_ & TYPE_POPUP) == 0); | 2477 DCHECK((type_ & TYPE_POPUP) == 0); |
| 2457 DCHECK(type_ != TYPE_APP_PANEL); | 2478 DCHECK(type_ != TYPE_APP_PANEL); |
| 2458 browser = Browser::CreateForApp(app_name_, extension_app_, profile_, | 2479 browser = Browser::CreateForApp(app_name_, extension_app_, profile_, |
| 2459 false); | 2480 false); |
| 2460 } else if (type_ == TYPE_POPUP) { | 2481 } else if (type_ == TYPE_POPUP) { |
| 2461 browser = Browser::CreateForType(TYPE_POPUP, profile_); | 2482 browser = Browser::CreateForType(TYPE_POPUP, profile_); |
| 2462 } | 2483 } |
| 2463 | 2484 |
| 2464 // Preserve the size of the original window. The new window has already | 2485 // Preserve the size of the original window. The new window has already |
| 2465 // been given an offset by the OS, so we shouldn't copy the old bounds. | 2486 // been given an offset by the OS, so we shouldn't copy the old bounds. |
| 2466 BrowserWindow* new_window = browser->window(); | 2487 BrowserWindow* new_window = browser->window(); |
| 2467 new_window->SetBounds(gfx::Rect(new_window->GetRestoredBounds().origin(), | 2488 new_window->SetBounds(gfx::Rect(new_window->GetRestoredBounds().origin(), |
| 2468 window()->GetRestoredBounds().size())); | 2489 window()->GetRestoredBounds().size())); |
| 2469 | 2490 |
| 2470 // We need to show the browser now. Otherwise ContainerWin assumes the | 2491 // We need to show the browser now. Otherwise ContainerWin assumes the |
| 2471 // TabContents is invisible and won't size it. | 2492 // TabContents is invisible and won't size it. |
| 2472 browser->window()->Show(); | 2493 browser->window()->Show(); |
| 2473 | 2494 |
| 2474 // The page transition below is only for the purpose of inserting the tab. | 2495 // The page transition below is only for the purpose of inserting the tab. |
| 2475 new_contents = browser->AddTab( | 2496 new_contents = browser->AddTab(contents->Clone(), PageTransition::LINK); |
| 2476 contents->Clone()->controller().tab_contents(), | |
| 2477 PageTransition::LINK); | |
| 2478 } | 2497 } |
| 2479 | 2498 |
| 2480 if (profile_->HasSessionService()) { | 2499 if (profile_->HasSessionService()) { |
| 2481 SessionService* session_service = profile_->GetSessionService(); | 2500 SessionService* session_service = profile_->GetSessionService(); |
| 2482 if (session_service) | 2501 if (session_service) |
| 2483 session_service->TabRestored(&new_contents->controller(), pinned); | 2502 session_service->TabRestored(&new_contents->controller(), pinned); |
| 2484 } | 2503 } |
| 2485 } | 2504 } |
| 2486 | 2505 |
| 2487 void Browser::CloseFrameAfterDragSession() { | 2506 void Browser::CloseFrameAfterDragSession() { |
| 2488 #if defined(OS_WIN) || defined(OS_LINUX) | 2507 #if defined(OS_WIN) || defined(OS_LINUX) |
| 2489 // This is scheduled to run after we return to the message loop because | 2508 // This is scheduled to run after we return to the message loop because |
| 2490 // otherwise the frame will think the drag session is still active and ignore | 2509 // otherwise the frame will think the drag session is still active and ignore |
| 2491 // the request. | 2510 // the request. |
| 2492 // TODO(port): figure out what is required here in a cross-platform world | 2511 // TODO(port): figure out what is required here in a cross-platform world |
| 2493 MessageLoop::current()->PostTask( | 2512 MessageLoop::current()->PostTask( |
| 2494 FROM_HERE, method_factory_.NewRunnableMethod(&Browser::CloseFrame)); | 2513 FROM_HERE, method_factory_.NewRunnableMethod(&Browser::CloseFrame)); |
| 2495 #endif | 2514 #endif |
| 2496 } | 2515 } |
| 2497 | 2516 |
| 2498 void Browser::CreateHistoricalTab(TabContents* contents) { | 2517 void Browser::CreateHistoricalTab(TabContentsWrapper* contents) { |
| 2499 // We don't create historical tabs for incognito windows or windows without | 2518 // We don't create historical tabs for incognito windows or windows without |
| 2500 // profiles. | 2519 // profiles. |
| 2501 if (!profile() || profile()->IsOffTheRecord() || | 2520 if (!profile() || profile()->IsOffTheRecord() || |
| 2502 !profile()->GetTabRestoreService()) { | 2521 !profile()->GetTabRestoreService()) { |
| 2503 return; | 2522 return; |
| 2504 } | 2523 } |
| 2505 | 2524 |
| 2506 // We only create historical tab entries for tabbed browser windows. | 2525 // We only create historical tab entries for tabbed browser windows. |
| 2507 if (CanSupportWindowFeature(FEATURE_TABSTRIP)) { | 2526 if (CanSupportWindowFeature(FEATURE_TABSTRIP)) { |
| 2508 profile()->GetTabRestoreService()->CreateHistoricalTab( | 2527 profile()->GetTabRestoreService()->CreateHistoricalTab( |
| 2509 &contents->controller()); | 2528 &contents->controller()); |
| 2510 } | 2529 } |
| 2511 } | 2530 } |
| 2512 | 2531 |
| 2513 bool Browser::RunUnloadListenerBeforeClosing(TabContents* contents) { | 2532 bool Browser::RunUnloadListenerBeforeClosing(TabContentsWrapper* contents) { |
| 2514 return Browser::RunUnloadEventsHelper(contents); | 2533 return Browser::RunUnloadEventsHelper(contents->tab_contents()); |
| 2515 } | 2534 } |
| 2516 | 2535 |
| 2517 bool Browser::CanReloadContents(TabContents* source) const { | 2536 bool Browser::CanReloadContents(TabContents* source) const { |
| 2518 return type() != TYPE_DEVTOOLS; | 2537 return type() != TYPE_DEVTOOLS; |
| 2519 } | 2538 } |
| 2520 | 2539 |
| 2521 bool Browser::CanCloseContentsAt(int index) { | 2540 bool Browser::CanCloseContentsAt(int index) { |
| 2522 if (!CanCloseTab()) | 2541 if (!CanCloseTab()) |
| 2523 return false; | 2542 return false; |
| 2524 if (tab_handler_->GetTabStripModel()->count() > 1) | 2543 if (tab_handler_->GetTabStripModel()->count() > 1) |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2563 bool Browser::LargeIconsPermitted() const { | 2582 bool Browser::LargeIconsPermitted() const { |
| 2564 // We don't show the big icons in tabs for TYPE_EXTENSION_APP windows because | 2583 // We don't show the big icons in tabs for TYPE_EXTENSION_APP windows because |
| 2565 // for those windows, we already have a big icon in the top-left outside any | 2584 // for those windows, we already have a big icon in the top-left outside any |
| 2566 // tab. Having big tab icons too looks kinda redonk. | 2585 // tab. Having big tab icons too looks kinda redonk. |
| 2567 return TYPE_EXTENSION_APP != type(); | 2586 return TYPE_EXTENSION_APP != type(); |
| 2568 } | 2587 } |
| 2569 | 2588 |
| 2570 /////////////////////////////////////////////////////////////////////////////// | 2589 /////////////////////////////////////////////////////////////////////////////// |
| 2571 // Browser, TabStripModelObserver implementation: | 2590 // Browser, TabStripModelObserver implementation: |
| 2572 | 2591 |
| 2573 void Browser::TabInsertedAt(TabContents* contents, | 2592 void Browser::TabInsertedAt(TabContentsWrapper* contents, |
| 2574 int index, | 2593 int index, |
| 2575 bool foreground) { | 2594 bool foreground) { |
| 2576 contents->set_delegate(this); | 2595 contents->tab_contents()->set_delegate(this); |
| 2577 contents->controller().SetWindowID(session_id()); | 2596 contents->controller().SetWindowID(session_id()); |
| 2578 | 2597 |
| 2579 SyncHistoryWithTabs(index); | 2598 SyncHistoryWithTabs(index); |
| 2580 | 2599 |
| 2581 // Make sure the loading state is updated correctly, otherwise the throbber | 2600 // Make sure the loading state is updated correctly, otherwise the throbber |
| 2582 // won't start if the page is loading. | 2601 // won't start if the page is loading. |
| 2583 LoadingStateChanged(contents); | 2602 LoadingStateChanged(contents->tab_contents()); |
| 2584 | 2603 |
| 2585 // If the tab crashes in the beforeunload or unload handler, it won't be | 2604 // If the tab crashes in the beforeunload or unload handler, it won't be |
| 2586 // able to ack. But we know we can close it. | 2605 // able to ack. But we know we can close it. |
| 2587 registrar_.Add(this, NotificationType::TAB_CONTENTS_DISCONNECTED, | 2606 registrar_.Add(this, NotificationType::TAB_CONTENTS_DISCONNECTED, |
| 2588 Source<TabContents>(contents)); | 2607 Source<TabContentsWrapper>(contents)); |
| 2589 } | 2608 } |
| 2590 | 2609 |
| 2591 void Browser::TabClosingAt(TabStripModel* tab_strip_model, | 2610 void Browser::TabClosingAt(TabStripModel* tab_strip_model, |
| 2592 TabContents* contents, | 2611 TabContentsWrapper* contents, |
| 2593 int index) { | 2612 int index) { |
| 2594 NotificationService::current()->Notify( | 2613 NotificationService::current()->Notify( |
| 2595 NotificationType::TAB_CLOSING, | 2614 NotificationType::TAB_CLOSING, |
| 2596 Source<NavigationController>(&contents->controller()), | 2615 Source<NavigationController>(&contents->controller()), |
| 2597 NotificationService::NoDetails()); | 2616 NotificationService::NoDetails()); |
| 2598 | 2617 |
| 2599 // Sever the TabContents' connection back to us. | 2618 // Sever the TabContents' connection back to us. |
| 2600 contents->set_delegate(NULL); | 2619 contents->tab_contents()->set_delegate(NULL); |
| 2601 } | 2620 } |
| 2602 | 2621 |
| 2603 void Browser::TabDetachedAt(TabContents* contents, int index) { | 2622 void Browser::TabDetachedAt(TabContentsWrapper* contents, int index) { |
| 2604 TabDetachedAtImpl(contents, index, DETACH_TYPE_DETACH); | 2623 TabDetachedAtImpl(contents, index, DETACH_TYPE_DETACH); |
| 2605 } | 2624 } |
| 2606 | 2625 |
| 2607 void Browser::TabDeselectedAt(TabContents* contents, int index) { | 2626 void Browser::TabDeselectedAt(TabContentsWrapper* contents, int index) { |
| 2608 if (instant()) | 2627 if (instant()) |
| 2609 instant()->DestroyPreviewContents(); | 2628 instant()->DestroyPreviewContents(); |
| 2610 | 2629 |
| 2611 // Save what the user's currently typing, so it can be restored when we | 2630 // Save what the user's currently typing, so it can be restored when we |
| 2612 // switch back to this tab. | 2631 // switch back to this tab. |
| 2613 window_->GetLocationBar()->SaveStateToContents(contents); | 2632 window_->GetLocationBar()->SaveStateToContents(contents->tab_contents()); |
| 2614 } | 2633 } |
| 2615 | 2634 |
| 2616 void Browser::TabSelectedAt(TabContents* old_contents, | 2635 void Browser::TabSelectedAt(TabContentsWrapper* old_contents, |
| 2617 TabContents* new_contents, | 2636 TabContentsWrapper* new_contents, |
| 2618 int index, | 2637 int index, |
| 2619 bool user_gesture) { | 2638 bool user_gesture) { |
| 2620 DCHECK(old_contents != new_contents); | 2639 DCHECK(old_contents != new_contents); |
| 2621 | 2640 |
| 2622 // If we have any update pending, do it now. | 2641 // If we have any update pending, do it now. |
| 2623 if (!chrome_updater_factory_.empty() && old_contents) | 2642 if (!chrome_updater_factory_.empty() && old_contents) |
| 2624 ProcessPendingUIUpdates(); | 2643 ProcessPendingUIUpdates(); |
| 2625 | 2644 |
| 2626 // Propagate the profile to the location bar. | 2645 // Propagate the profile to the location bar. |
| 2627 UpdateToolbar(true); | 2646 UpdateToolbar(true); |
| 2628 | 2647 |
| 2629 // Update reload/stop state. | 2648 // Update reload/stop state. |
| 2630 UpdateReloadStopState(new_contents->is_loading(), true); | 2649 UpdateReloadStopState(new_contents->tab_contents()->is_loading(), true); |
| 2631 | 2650 |
| 2632 // Update commands to reflect current state. | 2651 // Update commands to reflect current state. |
| 2633 UpdateCommandsForTabState(); | 2652 UpdateCommandsForTabState(); |
| 2634 | 2653 |
| 2635 // Reset the status bubble. | 2654 // Reset the status bubble. |
| 2636 StatusBubble* status_bubble = GetStatusBubble(); | 2655 StatusBubble* status_bubble = GetStatusBubble(); |
| 2637 if (status_bubble) { | 2656 if (status_bubble) { |
| 2638 status_bubble->Hide(); | 2657 status_bubble->Hide(); |
| 2639 | 2658 |
| 2640 // Show the loading state (if any). | 2659 // Show the loading state (if any). |
| 2641 status_bubble->SetStatus(WideToUTF16Hack( | 2660 status_bubble->SetStatus(WideToUTF16Hack( |
| 2642 GetSelectedTabContents()->GetStatusText())); | 2661 GetSelectedTabContents()->GetStatusText())); |
| 2643 } | 2662 } |
| 2644 | 2663 |
| 2645 if (HasFindBarController()) { | 2664 if (HasFindBarController()) { |
| 2646 find_bar_controller_->ChangeTabContents(new_contents); | 2665 find_bar_controller_->ChangeTabContents(new_contents->tab_contents()); |
| 2647 find_bar_controller_->find_bar()->MoveWindowIfNecessary(gfx::Rect(), true); | 2666 find_bar_controller_->find_bar()->MoveWindowIfNecessary(gfx::Rect(), true); |
| 2648 } | 2667 } |
| 2649 | 2668 |
| 2650 // Update sessions. Don't force creation of sessions. If sessions doesn't | 2669 // Update sessions. Don't force creation of sessions. If sessions doesn't |
| 2651 // exist, the change will be picked up by sessions when created. | 2670 // exist, the change will be picked up by sessions when created. |
| 2652 if (profile_->HasSessionService()) { | 2671 if (profile_->HasSessionService()) { |
| 2653 SessionService* session_service = profile_->GetSessionService(); | 2672 SessionService* session_service = profile_->GetSessionService(); |
| 2654 if (session_service && !tab_handler_->GetTabStripModel()->closing_all()) { | 2673 if (session_service && !tab_handler_->GetTabStripModel()->closing_all()) { |
| 2655 session_service->SetSelectedTabInWindow( | 2674 session_service->SetSelectedTabInWindow( |
| 2656 session_id(), tab_handler_->GetTabStripModel()->selected_index()); | 2675 session_id(), tab_handler_->GetTabStripModel()->selected_index()); |
| 2657 } | 2676 } |
| 2658 } | 2677 } |
| 2659 } | 2678 } |
| 2660 | 2679 |
| 2661 void Browser::TabMoved(TabContents* contents, | 2680 void Browser::TabMoved(TabContentsWrapper* contents, |
| 2662 int from_index, | 2681 int from_index, |
| 2663 int to_index) { | 2682 int to_index) { |
| 2664 DCHECK(from_index >= 0 && to_index >= 0); | 2683 DCHECK(from_index >= 0 && to_index >= 0); |
| 2665 // Notify the history service. | 2684 // Notify the history service. |
| 2666 SyncHistoryWithTabs(std::min(from_index, to_index)); | 2685 SyncHistoryWithTabs(std::min(from_index, to_index)); |
| 2667 } | 2686 } |
| 2668 | 2687 |
| 2669 void Browser::TabReplacedAt(TabContents* old_contents, | 2688 void Browser::TabReplacedAt(TabContentsWrapper* old_contents, |
| 2670 TabContents* new_contents, | 2689 TabContentsWrapper* new_contents, |
| 2671 int index) { | 2690 int index) { |
| 2672 TabDetachedAtImpl(old_contents, index, DETACH_TYPE_REPLACE); | 2691 TabDetachedAtImpl(old_contents, index, DETACH_TYPE_REPLACE); |
| 2673 TabInsertedAt(new_contents, index, | 2692 TabInsertedAt(new_contents, index, |
| 2674 (index == tab_handler_->GetTabStripModel()->selected_index())); | 2693 (index == tab_handler_->GetTabStripModel()->selected_index())); |
| 2675 | 2694 |
| 2676 int entry_count = new_contents->controller().entry_count(); | 2695 int entry_count = new_contents->controller().entry_count(); |
| 2677 if (entry_count > 0) { | 2696 if (entry_count > 0) { |
| 2678 // Send out notification so that observers are updated appropriately. | 2697 // Send out notification so that observers are updated appropriately. |
| 2679 new_contents->controller().NotifyEntryChanged( | 2698 new_contents->controller().NotifyEntryChanged( |
| 2680 new_contents->controller().GetEntryAtIndex(entry_count - 1), | 2699 new_contents->controller().GetEntryAtIndex(entry_count - 1), |
| 2681 entry_count - 1); | 2700 entry_count - 1); |
| 2682 } | 2701 } |
| 2683 | 2702 |
| 2684 SessionService* session_service = profile()->GetSessionService(); | 2703 SessionService* session_service = profile()->GetSessionService(); |
| 2685 if (session_service) { | 2704 if (session_service) { |
| 2686 // The new_contents may end up with a different navigation stack. Force | 2705 // The new_contents may end up with a different navigation stack. Force |
| 2687 // the session service to update itself. | 2706 // the session service to update itself. |
| 2688 session_service->TabRestored( | 2707 session_service->TabRestored( |
| 2689 &new_contents->controller(), | 2708 &new_contents->controller(), |
| 2690 tab_handler_->GetTabStripModel()->IsTabPinned(index)); | 2709 tab_handler_->GetTabStripModel()->IsTabPinned(index)); |
| 2691 } | 2710 } |
| 2692 } | 2711 } |
| 2693 | 2712 |
| 2694 void Browser::TabPinnedStateChanged(TabContents* contents, int index) { | 2713 void Browser::TabPinnedStateChanged(TabContentsWrapper* contents, int index) { |
| 2695 if (!profile()->HasSessionService()) | 2714 if (!profile()->HasSessionService()) |
| 2696 return; | 2715 return; |
| 2697 SessionService* session_service = profile()->GetSessionService(); | 2716 SessionService* session_service = profile()->GetSessionService(); |
| 2698 if (session_service) { | 2717 if (session_service) { |
| 2699 session_service->SetPinnedState( | 2718 session_service->SetPinnedState( |
| 2700 session_id(), | 2719 session_id(), |
| 2701 GetTabContentsAt(index)->controller().session_id(), | 2720 GetTabContentsAt(index)->controller().session_id(), |
| 2702 tab_handler_->GetTabStripModel()->IsTabPinned(index)); | 2721 tab_handler_->GetTabStripModel()->IsTabPinned(index)); |
| 2703 } | 2722 } |
| 2704 } | 2723 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2718 | 2737 |
| 2719 /////////////////////////////////////////////////////////////////////////////// | 2738 /////////////////////////////////////////////////////////////////////////////// |
| 2720 // Browser, TabContentsDelegate implementation: | 2739 // Browser, TabContentsDelegate implementation: |
| 2721 | 2740 |
| 2722 void Browser::OpenURLFromTab(TabContents* source, | 2741 void Browser::OpenURLFromTab(TabContents* source, |
| 2723 const GURL& url, | 2742 const GURL& url, |
| 2724 const GURL& referrer, | 2743 const GURL& referrer, |
| 2725 WindowOpenDisposition disposition, | 2744 WindowOpenDisposition disposition, |
| 2726 PageTransition::Type transition) { | 2745 PageTransition::Type transition) { |
| 2727 browser::NavigateParams params(this, url, transition); | 2746 browser::NavigateParams params(this, url, transition); |
| 2728 params.source_contents = source; | 2747 params.source_contents = |
| 2748 tabstrip_model()->GetTabContentsAt( |
| 2749 tabstrip_model()->GetWrapperIndex(source)); |
| 2729 params.referrer = referrer; | 2750 params.referrer = referrer; |
| 2730 params.disposition = disposition; | 2751 params.disposition = disposition; |
| 2731 params.tabstrip_add_types = TabStripModel::ADD_NONE; | 2752 params.tabstrip_add_types = TabStripModel::ADD_NONE; |
| 2732 browser::Navigate(¶ms); | 2753 browser::Navigate(¶ms); |
| 2733 } | 2754 } |
| 2734 | 2755 |
| 2735 void Browser::NavigationStateChanged(const TabContents* source, | 2756 void Browser::NavigationStateChanged(const TabContents* source, |
| 2736 unsigned changed_flags) { | 2757 unsigned changed_flags) { |
| 2737 // Only update the UI when something visible has changed. | 2758 // Only update the UI when something visible has changed. |
| 2738 if (changed_flags) | 2759 if (changed_flags) |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2765 GdkScreen* screen = gdk_screen_get_default(); | 2786 GdkScreen* screen = gdk_screen_get_default(); |
| 2766 int max_width = gdk_screen_get_width(screen) * kPopupMaxWidthFactor; | 2787 int max_width = gdk_screen_get_width(screen) * kPopupMaxWidthFactor; |
| 2767 int max_height = gdk_screen_get_height(screen) * kPopupMaxHeightFactor; | 2788 int max_height = gdk_screen_get_height(screen) * kPopupMaxHeightFactor; |
| 2768 if (initial_pos.width() > max_width || initial_pos.width() == 0 || | 2789 if (initial_pos.width() > max_width || initial_pos.width() == 0 || |
| 2769 initial_pos.height() > max_height || initial_pos.height() == 0) { | 2790 initial_pos.height() > max_height || initial_pos.height() == 0) { |
| 2770 disposition = NEW_FOREGROUND_TAB; | 2791 disposition = NEW_FOREGROUND_TAB; |
| 2771 } | 2792 } |
| 2772 } | 2793 } |
| 2773 #endif | 2794 #endif |
| 2774 | 2795 |
| 2775 browser::NavigateParams params(this, new_contents); | 2796 TabContentsWrapper* wrapper = new TabContentsWrapper(new_contents); |
| 2776 params.source_contents = source; | 2797 browser::NavigateParams params(this, wrapper); |
| 2777 params.disposition = disposition; | 2798 params.source_contents = |
| 2778 params.window_bounds = initial_pos; | 2799 tabstrip_model()->GetTabContentsAt( |
| 2779 browser::Navigate(¶ms); | 2800 tabstrip_model()->GetWrapperIndex(source)); |
| 2801 params.disposition = disposition; |
| 2802 params.window_bounds = initial_pos; |
| 2803 browser::Navigate(¶ms); |
| 2780 } | 2804 } |
| 2781 | 2805 |
| 2782 void Browser::ActivateContents(TabContents* contents) { | 2806 void Browser::ActivateContents(TabContents* contents) { |
| 2783 tab_handler_->GetTabStripModel()->SelectTabContentsAt( | 2807 tab_handler_->GetTabStripModel()->SelectTabContentsAt( |
| 2784 tab_handler_->GetTabStripModel()->GetIndexOfTabContents(contents), false); | 2808 tab_handler_->GetTabStripModel()->GetWrapperIndex(contents), false); |
| 2785 window_->Activate(); | 2809 window_->Activate(); |
| 2786 } | 2810 } |
| 2787 | 2811 |
| 2788 void Browser::DeactivateContents(TabContents* contents) { | 2812 void Browser::DeactivateContents(TabContents* contents) { |
| 2789 window_->Deactivate(); | 2813 window_->Deactivate(); |
| 2790 } | 2814 } |
| 2791 | 2815 |
| 2792 void Browser::LoadingStateChanged(TabContents* source) { | 2816 void Browser::LoadingStateChanged(TabContents* source) { |
| 2793 window_->UpdateLoadingAnimations( | 2817 window_->UpdateLoadingAnimations( |
| 2794 tab_handler_->GetTabStripModel()->TabsAreLoading()); | 2818 tab_handler_->GetTabStripModel()->TabsAreLoading()); |
| 2795 window_->UpdateTitleBar(); | 2819 window_->UpdateTitleBar(); |
| 2796 | 2820 |
| 2797 if (source == GetSelectedTabContents()) { | 2821 TabContents* selected_contents = GetSelectedTabContents(); |
| 2822 if (source == selected_contents) { |
| 2798 UpdateReloadStopState(source->is_loading(), false); | 2823 UpdateReloadStopState(source->is_loading(), false); |
| 2799 if (GetStatusBubble()) { | 2824 if (GetStatusBubble()) { |
| 2800 GetStatusBubble()->SetStatus(WideToUTF16( | 2825 GetStatusBubble()->SetStatus(WideToUTF16( |
| 2801 GetSelectedTabContents()->GetStatusText())); | 2826 GetSelectedTabContents()->GetStatusText())); |
| 2802 } | 2827 } |
| 2803 | 2828 |
| 2804 if (!source->is_loading() && | 2829 if (!source->is_loading() && |
| 2805 pending_web_app_action_ == UPDATE_SHORTCUT) { | 2830 pending_web_app_action_ == UPDATE_SHORTCUT) { |
| 2806 // Schedule a shortcut update when web application info is available if | 2831 // Schedule a shortcut update when web application info is available if |
| 2807 // last committed entry is not NULL. Last committed entry could be NULL | 2832 // last committed entry is not NULL. Last committed entry could be NULL |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2820 void Browser::CloseContents(TabContents* source) { | 2845 void Browser::CloseContents(TabContents* source) { |
| 2821 if (is_attempting_to_close_browser_) { | 2846 if (is_attempting_to_close_browser_) { |
| 2822 // If we're trying to close the browser, just clear the state related to | 2847 // If we're trying to close the browser, just clear the state related to |
| 2823 // waiting for unload to fire. Don't actually try to close the tab as it | 2848 // waiting for unload to fire. Don't actually try to close the tab as it |
| 2824 // will go down the slow shutdown path instead of the fast path of killing | 2849 // will go down the slow shutdown path instead of the fast path of killing |
| 2825 // all the renderer processes. | 2850 // all the renderer processes. |
| 2826 ClearUnloadState(source); | 2851 ClearUnloadState(source); |
| 2827 return; | 2852 return; |
| 2828 } | 2853 } |
| 2829 | 2854 |
| 2830 int index = tab_handler_->GetTabStripModel()->GetIndexOfTabContents(source); | 2855 int index = tab_handler_->GetTabStripModel()->GetWrapperIndex(source); |
| 2831 if (index == TabStripModel::kNoTab) { | 2856 if (index == TabStripModel::kNoTab) { |
| 2832 NOTREACHED() << "CloseContents called for tab not in our strip"; | 2857 NOTREACHED() << "CloseContents called for tab not in our strip"; |
| 2833 return; | 2858 return; |
| 2834 } | 2859 } |
| 2835 tab_handler_->GetTabStripModel()->CloseTabContentsAt( | 2860 tab_handler_->GetTabStripModel()->CloseTabContentsAt( |
| 2836 index, | 2861 index, |
| 2837 TabStripModel::CLOSE_CREATE_HISTORICAL_TAB); | 2862 TabStripModel::CLOSE_CREATE_HISTORICAL_TAB); |
| 2838 } | 2863 } |
| 2839 | 2864 |
| 2840 void Browser::MoveContents(TabContents* source, const gfx::Rect& pos) { | 2865 void Browser::MoveContents(TabContents* source, const gfx::Rect& pos) { |
| 2841 if ((type() & TYPE_POPUP) == 0) { | 2866 if ((type() & TYPE_POPUP) == 0) { |
| 2842 NOTREACHED() << "moving invalid browser type"; | 2867 NOTREACHED() << "moving invalid browser type"; |
| 2843 return; | 2868 return; |
| 2844 } | 2869 } |
| 2845 window_->SetBounds(pos); | 2870 window_->SetBounds(pos); |
| 2846 } | 2871 } |
| 2847 | 2872 |
| 2848 void Browser::DetachContents(TabContents* source) { | 2873 void Browser::DetachContents(TabContents* source) { |
| 2849 int index = tab_handler_->GetTabStripModel()->GetIndexOfTabContents(source); | 2874 int index = tab_handler_->GetTabStripModel()->GetWrapperIndex(source); |
| 2850 if (index >= 0) | 2875 if (index >= 0) |
| 2851 tab_handler_->GetTabStripModel()->DetachTabContentsAt(index); | 2876 tab_handler_->GetTabStripModel()->DetachTabContentsAt(index); |
| 2852 } | 2877 } |
| 2853 | 2878 |
| 2854 bool Browser::IsPopup(const TabContents* source) const { | 2879 bool Browser::IsPopup(const TabContents* source) const { |
| 2855 // A non-tabbed BROWSER is an unconstrained popup. | 2880 // A non-tabbed BROWSER is an unconstrained popup. |
| 2856 return !!(type() & TYPE_POPUP); | 2881 return !!(type() & TYPE_POPUP); |
| 2857 } | 2882 } |
| 2858 | 2883 |
| 2859 void Browser::ToolbarSizeChanged(TabContents* source, bool is_animating) { | 2884 void Browser::ToolbarSizeChanged(TabContents* source, bool is_animating) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2903 void Browser::ContentsZoomChange(bool zoom_in) { | 2928 void Browser::ContentsZoomChange(bool zoom_in) { |
| 2904 ExecuteCommand(zoom_in ? IDC_ZOOM_PLUS : IDC_ZOOM_MINUS); | 2929 ExecuteCommand(zoom_in ? IDC_ZOOM_PLUS : IDC_ZOOM_MINUS); |
| 2905 } | 2930 } |
| 2906 | 2931 |
| 2907 void Browser::OnContentSettingsChange(TabContents* source) { | 2932 void Browser::OnContentSettingsChange(TabContents* source) { |
| 2908 if (source == GetSelectedTabContents()) | 2933 if (source == GetSelectedTabContents()) |
| 2909 window_->GetLocationBar()->UpdateContentSettingsIcons(); | 2934 window_->GetLocationBar()->UpdateContentSettingsIcons(); |
| 2910 } | 2935 } |
| 2911 | 2936 |
| 2912 void Browser::SetTabContentBlocked(TabContents* contents, bool blocked) { | 2937 void Browser::SetTabContentBlocked(TabContents* contents, bool blocked) { |
| 2913 int index = tabstrip_model()->GetIndexOfTabContents(contents); | 2938 int index = tabstrip_model()->GetWrapperIndex(contents); |
| 2914 if (index == TabStripModel::kNoTab) { | 2939 if (index == TabStripModel::kNoTab) { |
| 2915 NOTREACHED(); | 2940 NOTREACHED(); |
| 2916 return; | 2941 return; |
| 2917 } | 2942 } |
| 2918 tabstrip_model()->SetTabBlocked(index, blocked); | 2943 tabstrip_model()->SetTabBlocked(index, blocked); |
| 2919 } | 2944 } |
| 2920 | 2945 |
| 2921 void Browser::TabContentsFocused(TabContents* tab_content) { | 2946 void Browser::TabContentsFocused(TabContents* tab_content) { |
| 2922 window_->TabContentsFocused(tab_content); | 2947 window_->TabContentsFocused(tab_content); |
| 2923 } | 2948 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2934 return (type_ & TYPE_APP) != 0; | 2959 return (type_ & TYPE_APP) != 0; |
| 2935 } | 2960 } |
| 2936 | 2961 |
| 2937 void Browser::ConvertContentsToApplication(TabContents* contents) { | 2962 void Browser::ConvertContentsToApplication(TabContents* contents) { |
| 2938 const GURL& url = contents->controller().GetActiveEntry()->url(); | 2963 const GURL& url = contents->controller().GetActiveEntry()->url(); |
| 2939 std::string app_name = web_app::GenerateApplicationNameFromURL(url); | 2964 std::string app_name = web_app::GenerateApplicationNameFromURL(url); |
| 2940 RegisterAppPrefs(app_name); | 2965 RegisterAppPrefs(app_name); |
| 2941 | 2966 |
| 2942 DetachContents(contents); | 2967 DetachContents(contents); |
| 2943 Browser* browser = Browser::CreateForApp(app_name, NULL, profile_, false); | 2968 Browser* browser = Browser::CreateForApp(app_name, NULL, profile_, false); |
| 2944 browser->tabstrip_model()->AppendTabContents(contents, true); | 2969 TabContentsWrapper* wrapper = new TabContentsWrapper(contents); |
| 2945 TabContents* tab_contents = browser->GetSelectedTabContents(); | 2970 browser->tabstrip_model()->AppendTabContents(wrapper, true); |
| 2971 TabContents* tab_contents = GetSelectedTabContents(); |
| 2946 tab_contents->GetMutableRendererPrefs()->can_accept_load_drops = false; | 2972 tab_contents->GetMutableRendererPrefs()->can_accept_load_drops = false; |
| 2947 tab_contents->render_view_host()->SyncRendererPrefs(); | 2973 tab_contents->render_view_host()->SyncRendererPrefs(); |
| 2948 browser->window()->Show(); | 2974 browser->window()->Show(); |
| 2949 } | 2975 } |
| 2950 | 2976 |
| 2951 bool Browser::ShouldDisplayURLField() { | 2977 bool Browser::ShouldDisplayURLField() { |
| 2952 return !IsApplication(); | 2978 return !IsApplication(); |
| 2953 } | 2979 } |
| 2954 | 2980 |
| 2955 void Browser::BeforeUnloadFired(TabContents* tab, | 2981 void Browser::BeforeUnloadFired(TabContents* tab, |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3199 } | 3225 } |
| 3200 | 3226 |
| 3201 case NotificationType::EXTENSION_UNLOADED: | 3227 case NotificationType::EXTENSION_UNLOADED: |
| 3202 case NotificationType::EXTENSION_UNLOADED_DISABLED: { | 3228 case NotificationType::EXTENSION_UNLOADED_DISABLED: { |
| 3203 window()->GetLocationBar()->UpdatePageActions(); | 3229 window()->GetLocationBar()->UpdatePageActions(); |
| 3204 | 3230 |
| 3205 // Close any tabs from the unloaded extension. | 3231 // Close any tabs from the unloaded extension. |
| 3206 const Extension* extension = Details<const Extension>(details).ptr(); | 3232 const Extension* extension = Details<const Extension>(details).ptr(); |
| 3207 TabStripModel* model = tab_handler_->GetTabStripModel(); | 3233 TabStripModel* model = tab_handler_->GetTabStripModel(); |
| 3208 for (int i = model->count() - 1; i >= 0; --i) { | 3234 for (int i = model->count() - 1; i >= 0; --i) { |
| 3209 TabContents* tc = model->GetTabContentsAt(i); | 3235 TabContents* tc = model->GetTabContentsAt(i)->tab_contents(); |
| 3210 if (tc->GetURL().SchemeIs(chrome::kExtensionScheme) && | 3236 if (tc->GetURL().SchemeIs(chrome::kExtensionScheme) && |
| 3211 tc->GetURL().host() == extension->id()) { | 3237 tc->GetURL().host() == extension->id()) { |
| 3212 CloseTabContents(tc); | 3238 CloseTabContents(tc); |
| 3213 } | 3239 } |
| 3214 } | 3240 } |
| 3215 | 3241 |
| 3216 break; | 3242 break; |
| 3217 } | 3243 } |
| 3218 | 3244 |
| 3219 case NotificationType::EXTENSION_PROCESS_TERMINATED: { | 3245 case NotificationType::EXTENSION_PROCESS_TERMINATED: { |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3329 show_main_ui && profile_->IsSyncAccessible()); | 3355 show_main_ui && profile_->IsSyncAccessible()); |
| 3330 } | 3356 } |
| 3331 | 3357 |
| 3332 /////////////////////////////////////////////////////////////////////////////// | 3358 /////////////////////////////////////////////////////////////////////////////// |
| 3333 // Browser, InstantDelegate implementation: | 3359 // Browser, InstantDelegate implementation: |
| 3334 | 3360 |
| 3335 void Browser::PrepareForInstant() { | 3361 void Browser::PrepareForInstant() { |
| 3336 window_->PrepareForInstant(); | 3362 window_->PrepareForInstant(); |
| 3337 } | 3363 } |
| 3338 | 3364 |
| 3339 void Browser::ShowInstant(TabContents* preview_contents) { | 3365 void Browser::ShowInstant(TabContentsWrapper* preview_contents) { |
| 3340 DCHECK(instant_->tab_contents() == GetSelectedTabContents()); | 3366 DCHECK(instant_->tab_contents() == GetSelectedTabContentsWrapper()); |
| 3341 window_->ShowInstant(preview_contents); | 3367 window_->ShowInstant(preview_contents->tab_contents()); |
| 3342 } | 3368 } |
| 3343 | 3369 |
| 3344 void Browser::HideInstant() { | 3370 void Browser::HideInstant() { |
| 3345 window_->HideInstant(); | 3371 window_->HideInstant(); |
| 3346 } | 3372 } |
| 3347 | 3373 |
| 3348 void Browser::CommitInstant(TabContents* preview_contents) { | 3374 void Browser::CommitInstant(TabContentsWrapper* preview_contents) { |
| 3349 TabContents* tab_contents = instant_->tab_contents(); | 3375 TabContentsWrapper* tab_contents = instant_->tab_contents(); |
| 3350 int index = tab_handler_->GetTabStripModel()->GetIndexOfTabContents( | 3376 int index = |
| 3351 tab_contents); | 3377 tab_handler_->GetTabStripModel()->GetIndexOfTabContents(tab_contents); |
| 3352 DCHECK_NE(-1, index); | 3378 DCHECK_NE(TabStripModel::kNoTab, index); |
| 3353 preview_contents->controller().CopyStateFromAndPrune( | 3379 preview_contents->controller().CopyStateFromAndPrune( |
| 3354 &tab_contents->controller()); | 3380 &tab_contents->controller()); |
| 3355 // TabStripModel takes ownership of preview_contents. | 3381 // TabStripModel takes ownership of preview_contents. |
| 3356 tab_handler_->GetTabStripModel()->ReplaceTabContentsAt( | 3382 tab_handler_->GetTabStripModel()->ReplaceTabContentsAt( |
| 3357 index, preview_contents); | 3383 index, preview_contents); |
| 3358 } | 3384 } |
| 3359 | 3385 |
| 3360 void Browser::SetSuggestedText(const string16& text) { | 3386 void Browser::SetSuggestedText(const string16& text) { |
| 3361 window()->GetLocationBar()->SetSuggestedText(text); | 3387 window()->GetLocationBar()->SetSuggestedText(text); |
| 3362 } | 3388 } |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3617 command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS_CONSOLE, | 3643 command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS_CONSOLE, |
| 3618 dev_tools_enabled); | 3644 dev_tools_enabled); |
| 3619 command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS_INSPECT, | 3645 command_updater_.UpdateCommandEnabled(IDC_DEV_TOOLS_INSPECT, |
| 3620 dev_tools_enabled); | 3646 dev_tools_enabled); |
| 3621 } | 3647 } |
| 3622 | 3648 |
| 3623 /////////////////////////////////////////////////////////////////////////////// | 3649 /////////////////////////////////////////////////////////////////////////////// |
| 3624 // Browser, UI update coalescing and handling (private): | 3650 // Browser, UI update coalescing and handling (private): |
| 3625 | 3651 |
| 3626 void Browser::UpdateToolbar(bool should_restore_state) { | 3652 void Browser::UpdateToolbar(bool should_restore_state) { |
| 3627 window_->UpdateToolbar(GetSelectedTabContents(), should_restore_state); | 3653 window_->UpdateToolbar(GetSelectedTabContentsWrapper(), should_restore_state); |
| 3628 } | 3654 } |
| 3629 | 3655 |
| 3630 void Browser::ScheduleUIUpdate(const TabContents* source, | 3656 void Browser::ScheduleUIUpdate(const TabContents* source, |
| 3631 unsigned changed_flags) { | 3657 unsigned changed_flags) { |
| 3632 if (!source) | 3658 if (!source) |
| 3633 return; | 3659 return; |
| 3634 | 3660 |
| 3635 // Do some synchronous updates. | 3661 // Do some synchronous updates. |
| 3636 if (changed_flags & TabContents::INVALIDATE_URL && | 3662 if (changed_flags & TabContents::INVALIDATE_URL && |
| 3637 source == GetSelectedTabContents()) { | 3663 source == GetSelectedTabContents()) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3731 command_updater_.UpdateCommandEnabled(IDC_CREATE_SHORTCUTS, | 3757 command_updater_.UpdateCommandEnabled(IDC_CREATE_SHORTCUTS, |
| 3732 web_app::IsValidUrl(contents->GetURL())); | 3758 web_app::IsValidUrl(contents->GetURL())); |
| 3733 #endif | 3759 #endif |
| 3734 window_->UpdateTitleBar(); | 3760 window_->UpdateTitleBar(); |
| 3735 } | 3761 } |
| 3736 } | 3762 } |
| 3737 | 3763 |
| 3738 // Updates that don't depend upon the selected state go here. | 3764 // Updates that don't depend upon the selected state go here. |
| 3739 if (flags & (TabContents::INVALIDATE_TAB | TabContents::INVALIDATE_TITLE)) { | 3765 if (flags & (TabContents::INVALIDATE_TAB | TabContents::INVALIDATE_TITLE)) { |
| 3740 tab_handler_->GetTabStripModel()->UpdateTabContentsStateAt( | 3766 tab_handler_->GetTabStripModel()->UpdateTabContentsStateAt( |
| 3741 tab_handler_->GetTabStripModel()->GetIndexOfTabContents(contents), | 3767 tab_handler_->GetTabStripModel()->GetWrapperIndex(contents), |
| 3742 TabStripModelObserver::ALL); | 3768 TabStripModelObserver::ALL); |
| 3743 } | 3769 } |
| 3744 | 3770 |
| 3745 // We don't need to process INVALIDATE_STATE, since that's not visible. | 3771 // We don't need to process INVALIDATE_STATE, since that's not visible. |
| 3746 } | 3772 } |
| 3747 | 3773 |
| 3748 scheduled_updates_.clear(); | 3774 scheduled_updates_.clear(); |
| 3749 } | 3775 } |
| 3750 | 3776 |
| 3751 void Browser::RemoveScheduledUpdatesFor(TabContents* contents) { | 3777 void Browser::RemoveScheduledUpdatesFor(TabContents* contents) { |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3999 GetSelectedTabContents()->StartFinding(find_text, | 4025 GetSelectedTabContents()->StartFinding(find_text, |
| 4000 forward_direction, | 4026 forward_direction, |
| 4001 false); // Not case sensitive. | 4027 false); // Not case sensitive. |
| 4002 } | 4028 } |
| 4003 } | 4029 } |
| 4004 | 4030 |
| 4005 void Browser::CloseFrame() { | 4031 void Browser::CloseFrame() { |
| 4006 window_->Close(); | 4032 window_->Close(); |
| 4007 } | 4033 } |
| 4008 | 4034 |
| 4009 void Browser::TabDetachedAtImpl(TabContents* contents, int index, | 4035 void Browser::TabDetachedAtImpl(TabContentsWrapper* contents, int index, |
| 4010 DetachType type) { | 4036 DetachType type) { |
| 4011 if (type == DETACH_TYPE_DETACH) { | 4037 if (type == DETACH_TYPE_DETACH) { |
| 4012 // Save the current location bar state, but only if the tab being detached | 4038 // Save the current location bar state, but only if the tab being detached |
| 4013 // is the selected tab. Because saving state can conditionally revert the | 4039 // is the selected tab. Because saving state can conditionally revert the |
| 4014 // location bar, saving the current tab's location bar state to a | 4040 // location bar, saving the current tab's location bar state to a |
| 4015 // non-selected tab can corrupt both tabs. | 4041 // non-selected tab can corrupt both tabs. |
| 4016 if (contents == GetSelectedTabContents()) | 4042 if (contents == GetSelectedTabContents()) |
| 4017 window_->GetLocationBar()->SaveStateToContents(contents); | 4043 window_->GetLocationBar()->SaveStateToContents(contents->tab_contents()); |
| 4018 | 4044 |
| 4019 if (!tab_handler_->GetTabStripModel()->closing_all()) | 4045 if (!tab_handler_->GetTabStripModel()->closing_all()) |
| 4020 SyncHistoryWithTabs(0); | 4046 SyncHistoryWithTabs(0); |
| 4021 } | 4047 } |
| 4022 | 4048 |
| 4023 contents->set_delegate(NULL); | 4049 contents->tab_contents()->set_delegate(NULL); |
| 4024 RemoveScheduledUpdatesFor(contents); | 4050 RemoveScheduledUpdatesFor(contents->tab_contents()); |
| 4025 | 4051 |
| 4026 if (find_bar_controller_.get() && | 4052 if (find_bar_controller_.get() && |
| 4027 index == tab_handler_->GetTabStripModel()->selected_index()) { | 4053 index == tab_handler_->GetTabStripModel()->selected_index()) { |
| 4028 find_bar_controller_->ChangeTabContents(NULL); | 4054 find_bar_controller_->ChangeTabContents(NULL); |
| 4029 } | 4055 } |
| 4030 | 4056 |
| 4031 registrar_.Remove(this, NotificationType::TAB_CONTENTS_DISCONNECTED, | 4057 registrar_.Remove(this, NotificationType::TAB_CONTENTS_DISCONNECTED, |
| 4032 Source<TabContents>(contents)); | 4058 Source<TabContentsWrapper>(contents)); |
| 4033 } | 4059 } |
| 4034 | 4060 |
| 4035 // static | 4061 // static |
| 4036 void Browser::RegisterAppPrefs(const std::string& app_name) { | 4062 void Browser::RegisterAppPrefs(const std::string& app_name) { |
| 4037 // A set of apps that we've already started. | 4063 // A set of apps that we've already started. |
| 4038 static std::set<std::string>* g_app_names = NULL; | 4064 static std::set<std::string>* g_app_names = NULL; |
| 4039 | 4065 |
| 4040 if (!g_app_names) | 4066 if (!g_app_names) |
| 4041 g_app_names = new std::set<std::string>; | 4067 g_app_names = new std::set<std::string>; |
| 4042 | 4068 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4062 | 4088 |
| 4063 void Browser::TabRestoreServiceDestroyed(TabRestoreService* service) { | 4089 void Browser::TabRestoreServiceDestroyed(TabRestoreService* service) { |
| 4064 if (!tab_restore_service_) | 4090 if (!tab_restore_service_) |
| 4065 return; | 4091 return; |
| 4066 | 4092 |
| 4067 DCHECK_EQ(tab_restore_service_, service); | 4093 DCHECK_EQ(tab_restore_service_, service); |
| 4068 tab_restore_service_->RemoveObserver(this); | 4094 tab_restore_service_->RemoveObserver(this); |
| 4069 tab_restore_service_ = NULL; | 4095 tab_restore_service_ = NULL; |
| 4070 } | 4096 } |
| 4071 | 4097 |
| 4098 // Centralized method for creating a TabContents, configuring and installing |
| 4099 // all its supporting objects and observers. |
| 4100 TabContentsWrapper* Browser::TabContentsFactory( |
| 4101 Profile* profile, |
| 4102 SiteInstance* site_instance, |
| 4103 int routing_id, |
| 4104 const TabContents* base_tab_contents, |
| 4105 SessionStorageNamespace* session_storage_namespace) { |
| 4106 TabContents* new_contents = new TabContents(profile, site_instance, |
| 4107 routing_id, base_tab_contents, |
| 4108 session_storage_namespace); |
| 4109 TabContentsWrapper* wrapper = new TabContentsWrapper(new_contents); |
| 4110 return wrapper; |
| 4111 } |
| 4112 |
| 4072 bool Browser::OpenInstant(WindowOpenDisposition disposition) { | 4113 bool Browser::OpenInstant(WindowOpenDisposition disposition) { |
| 4073 if (!instant() || !instant()->is_active() || !instant()->IsCurrent()) | 4114 if (!instant() || !instant()->is_active() || !instant()->IsCurrent()) |
| 4074 return false; | 4115 return false; |
| 4075 | 4116 |
| 4076 if (disposition == CURRENT_TAB) { | 4117 if (disposition == CURRENT_TAB) { |
| 4077 instant()->CommitCurrentPreview(INSTANT_COMMIT_PRESSED_ENTER); | 4118 instant()->CommitCurrentPreview(INSTANT_COMMIT_PRESSED_ENTER); |
| 4078 return true; | 4119 return true; |
| 4079 } | 4120 } |
| 4080 if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { | 4121 if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { |
| 4081 HideInstant(); | 4122 HideInstant(); |
| 4082 TabContents* preview_contents = instant()->ReleasePreviewContents( | 4123 TabContentsWrapper* preview_contents = instant()->ReleasePreviewContents( |
| 4083 INSTANT_COMMIT_PRESSED_ENTER); | 4124 INSTANT_COMMIT_PRESSED_ENTER); |
| 4084 preview_contents->controller().PruneAllButActive(); | 4125 preview_contents->controller().PruneAllButActive(); |
| 4085 tab_handler_->GetTabStripModel()->AddTabContents( | 4126 tab_handler_->GetTabStripModel()->AddTabContents( |
| 4086 preview_contents, | 4127 preview_contents, |
| 4087 -1, | 4128 -1, |
| 4088 instant()->last_transition_type(), | 4129 instant()->last_transition_type(), |
| 4089 disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_SELECTED : | 4130 disposition == NEW_FOREGROUND_TAB ? TabStripModel::ADD_SELECTED : |
| 4090 TabStripModel::ADD_NONE); | 4131 TabStripModel::ADD_NONE); |
| 4091 instant()->CompleteRelease(preview_contents); | 4132 instant()->CompleteRelease(preview_contents->tab_contents()); |
| 4092 return true; | 4133 return true; |
| 4093 } | 4134 } |
| 4094 // The omnibox currently doesn't use other dispositions, so we don't attempt | 4135 // The omnibox currently doesn't use other dispositions, so we don't attempt |
| 4095 // to handle them. If you hit this NOTREACHED file a bug and I'll (sky) add | 4136 // to handle them. If you hit this NOTREACHED file a bug and I'll (sky) add |
| 4096 // support for the new disposition. | 4137 // support for the new disposition. |
| 4097 NOTREACHED(); | 4138 NOTREACHED(); |
| 4098 return false; | 4139 return false; |
| 4099 } | 4140 } |
| 4100 | 4141 |
| 4101 void Browser::CreateInstantIfNecessary() { | 4142 void Browser::CreateInstantIfNecessary() { |
| 4102 if (type() == TYPE_NORMAL && InstantController::IsEnabled(profile()) && | 4143 if (type() == TYPE_NORMAL && InstantController::IsEnabled(profile()) && |
| 4103 !profile()->IsOffTheRecord()) { | 4144 !profile()->IsOffTheRecord()) { |
| 4104 instant_.reset(new InstantController(profile_, this)); | 4145 instant_.reset(new InstantController(profile_, this)); |
| 4105 } | 4146 } |
| 4106 } | 4147 } |
| OLD | NEW |