172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file. 4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/lazy_instance.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autocomplete_history_manager.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/autofill_manager.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/automation/automation_tab_helper.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/bookmarks/bookmark_model.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/custom_handlers/protocol_handler_registry.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_tab_helper.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_webnavigation_api.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/file_select_helper.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/history/history.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/history/top_sites.h" 19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/password_manager/password_manager.h" 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/password_manager_delegate_impl.h" 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/prefs/pref_service.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prerender/prerender_observer.h" 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/printing/print_preview_message_handler.h" 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/profiles/profile.h" 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h" 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/translate/translate_tab_helper.h" 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/download/download_tab_helper.h" 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/find_bar/find_tab_helper.h" 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h" 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/pref_names.h" 32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/render_messages.h" 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/view_messages.h" 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "grit/generated_resources.h" 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "grit/locale_settings.h" 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "grit/platform_locale_settings.h" 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/base/l10n/l10n_util.h" 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "webkit/glue/webpreferences.h" 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenstatic base::LazyInstance<PropertyAccessor<TabContentsWrapper*> > 4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen g_tab_contents_wrapper_property_accessor(base::LINKER_INITIALIZED); 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// TabContentsWrapper, public: 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTabContentsWrapper::TabContentsWrapper(TabContents* contents) 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : TabContentsObserver(contents), 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen delegate_(NULL), 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen is_starred_(false), 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents_(contents) { 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DCHECK(contents); 54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Stash this in the property bag so it can be retrieved without having to 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // go to a Browser. 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch property_accessor()->SetProperty(contents->property_bag(), this); 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Create the tab helpers. 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autocomplete_history_manager_.reset(new AutocompleteHistoryManager(contents)); 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_manager_.reset(new AutofillManager(contents)); 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen automation_tab_helper_.reset(new AutomationTabHelper(contents)); 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen download_tab_helper_.reset(new DownloadTabHelper(contents)); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_tab_helper_.reset(new ExtensionTabHelper(this)); 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen find_tab_helper_.reset(new FindTabHelper(contents)); 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen password_manager_delegate_.reset(new PasswordManagerDelegateImpl(contents)); 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen password_manager_.reset( 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new PasswordManager(contents, password_manager_delegate_.get())); 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen search_engine_tab_helper_.reset(new SearchEngineTabHelper(contents)); 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen translate_tab_helper_.reset(new TranslateTabHelper(contents)); 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen print_view_manager_.reset(new printing::PrintViewManager(contents)); 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Register for notifications about URL starredness changing on any profile. 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen registrar_.Add(this, NotificationType::URLS_STARRED, 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationService::AllSources()); 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen registrar_.Add(this, NotificationType::BOOKMARK_MODEL_LOADED, 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationService::AllSources()); 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Create the per-tab observers. 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen file_select_observer_.reset(new FileSelectObserver(contents)); 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prerender_observer_.reset(new prerender::PrerenderObserver(contents)); 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen print_preview_.reset(new printing::PrintPreviewMessageHandler(contents)); 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen webnavigation_observer_.reset( 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new ExtensionWebNavigationTabObserver(contents)); 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTabContentsWrapper::~TabContentsWrapper() { 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // We don't want any notifications while we're running our destructor. 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen registrar_.RemoveAll(); 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochPropertyAccessor<TabContentsWrapper*>* TabContentsWrapper::property_accessor() { 9221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return g_tab_contents_wrapper_property_accessor.Pointer(); 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TabContentsWrapper::RegisterUserPrefs(PrefService* prefs) { 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kAlternateErrorPagesEnabled, true); 97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen WebPreferences pref_defaults; 99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitJavascriptEnabled, 100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.javascript_enabled); 101dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitWebSecurityEnabled, 102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.web_security_enabled); 103dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref( 104dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs::kWebKitJavascriptCanOpenWindowsAutomatically, true); 105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitLoadsImagesAutomatically, 106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.loads_images_automatically); 107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitPluginsEnabled, 108dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.plugins_enabled); 109dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitDomPasteEnabled, 110dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.dom_paste_enabled); 111dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitShrinksStandaloneImagesToFit, 112dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.shrinks_standalone_images_to_fit); 113dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterDictionaryPref(prefs::kWebKitInspectorSettings); 114dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitTextAreasAreResizable, 115dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.text_areas_are_resizable); 116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebKitJavaEnabled, 117dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.java_enabled); 118dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterBooleanPref(prefs::kWebkitTabsToLinks, 119dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen pref_defaults.tabs_to_links); 120dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kAcceptLanguages, 122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_ACCEPT_LANGUAGES); 123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kDefaultCharset, 124dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_DEFAULT_ENCODING); 125dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kWebKitStandardFontFamily, 126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_STANDARD_FONT_FAMILY); 127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kWebKitFixedFontFamily, 128dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_FIXED_FONT_FAMILY); 129dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kWebKitSerifFontFamily, 130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_SERIF_FONT_FAMILY); 131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kWebKitSansSerifFontFamily, 132dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_SANS_SERIF_FONT_FAMILY); 133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kWebKitCursiveFontFamily, 134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_CURSIVE_FONT_FAMILY); 135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kWebKitFantasyFontFamily, 136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_FANTASY_FONT_FAMILY); 137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFontSize, 138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_DEFAULT_FONT_SIZE); 139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedIntegerPref(prefs::kWebKitDefaultFixedFontSize, 140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_DEFAULT_FIXED_FONT_SIZE); 141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumFontSize, 142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_MINIMUM_FONT_SIZE); 143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedIntegerPref(prefs::kWebKitMinimumLogicalFontSize, 144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_MINIMUM_LOGICAL_FONT_SIZE); 145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedBooleanPref(prefs::kWebKitUsesUniversalDetector, 146dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_USES_UNIVERSAL_DETECTOR); 147dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen prefs->RegisterLocalizedStringPref(prefs::kStaticEncodings, 148dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_STATIC_ENCODING_LIST); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen prefs->RegisterStringPref(prefs::kRecentlySelectedEncoding, ""); 150dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 151dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 152dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstring16 TabContentsWrapper::GetDefaultTitle() { 153dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_DEFAULT_TAB_TITLE); 154dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 155dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 156dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstring16 TabContentsWrapper::GetStatusText() const { 157dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!tab_contents()->is_loading() || 158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents()->load_state() == net::LOAD_STATE_IDLE) { 159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return string16(); 160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switch (tab_contents()->load_state()) { 163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_WAITING_FOR_CACHE: 164dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_LOAD_STATE_WAITING_FOR_CACHE); 165dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_ESTABLISHING_PROXY_TUNNEL: 166dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return 167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen l10n_util::GetStringUTF16(IDS_LOAD_STATE_ESTABLISHING_PROXY_TUNNEL); 168dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_RESOLVING_PROXY_FOR_URL: 169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_LOAD_STATE_RESOLVING_PROXY_FOR_URL); 170dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_RESOLVING_HOST: 171dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_LOAD_STATE_RESOLVING_HOST); 172dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_CONNECTING: 173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_LOAD_STATE_CONNECTING); 174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_SSL_HANDSHAKE: 175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_LOAD_STATE_SSL_HANDSHAKE); 176dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_SENDING_REQUEST: 177dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (tab_contents()->upload_size()) 178dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringFUTF16Int( 179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_LOAD_STATE_SENDING_REQUEST_WITH_PROGRESS, 180dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static_cast<int>((100 * tab_contents()->upload_position()) / 181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents()->upload_size())); 182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen else 183dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringUTF16(IDS_LOAD_STATE_SENDING_REQUEST); 184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_WAITING_FOR_RESPONSE: 185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return l10n_util::GetStringFUTF16(IDS_LOAD_STATE_WAITING_FOR_RESPONSE, 186dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents()->load_state_host()); 187dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Ignore net::LOAD_STATE_READING_RESPONSE and net::LOAD_STATE_IDLE 188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_IDLE: 189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen case net::LOAD_STATE_READING_RESPONSE: 190dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 192dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 193dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return string16(); 194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 196201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTabContentsWrapper* TabContentsWrapper::Clone() { 197201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContents* new_contents = tab_contents()->Clone(); 198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* new_wrapper = new TabContentsWrapper(new_contents); 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new_wrapper->extension_tab_helper()->CopyStateFrom( 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *extension_tab_helper_.get()); 202201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return new_wrapper; 203201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTabContentsWrapper* TabContentsWrapper::GetCurrentWrapperForContents( 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContents* contents) { 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper** wrapper = 20872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen property_accessor()->GetProperty(contents->property_bag()); 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return wrapper ? *wrapper : NULL; 21172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 21272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TabContentsWrapper, TabContentsObserver implementation: 215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 21672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TabContentsWrapper::DidNavigateMainFramePostCommit( 21772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NavigationController::LoadCommittedDetails& /*details*/, 21872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ViewHostMsg_FrameNavigate_Params& /*params*/) { 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UpdateStarredStateForCurrentURL(); 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool TabContentsWrapper::OnMessageReceived(const IPC::Message& message) { 223dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool handled = true; 224dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC_BEGIN_MESSAGE_MAP(TabContentsWrapper, message) 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC_MESSAGE_HANDLER(ViewHostMsg_PageContents, OnPageContents) 226dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC_MESSAGE_HANDLER(ViewHostMsg_JSOutOfMemory, OnJSOutOfMemory) 227dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC_MESSAGE_HANDLER(ViewHostMsg_RegisterProtocolHandler, 228dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen OnRegisterProtocolHandler) 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC_MESSAGE_HANDLER(ViewHostMsg_Thumbnail, OnMsgThumbnail) 230dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC_MESSAGE_UNHANDLED(handled = false) 231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IPC_END_MESSAGE_MAP() 232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return handled; 233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 234dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen//////////////////////////////////////////////////////////////////////////////// 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TabContentsWrapper, NotificationObserver implementation: 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TabContentsWrapper::Observe(NotificationType type, 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationSource& source, 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details) { 24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen switch (type.value) { 24272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case NotificationType::BOOKMARK_MODEL_LOADED: 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // BookmarkModel finished loading, fall through to update starred state. 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen case NotificationType::URLS_STARRED: { 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Somewhere, a URL has been starred. 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Ignore notifications for profiles other than our current one. 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Profile* source_profile = Source<Profile>(source).ptr(); 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!source_profile || !source_profile->IsSameProfile(profile())) 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UpdateStarredStateForCurrentURL(); 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen break; 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen default: 25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NOTREACHED(); 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 25872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 25972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen//////////////////////////////////////////////////////////////////////////////// 26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Internal helpers 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TabContentsWrapper::OnPageContents(const GURL& url, 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int32 page_id, 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& contents) { 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Don't index any https pages. People generally don't want their bank 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // accounts, etc. indexed on their computer, especially since some of these 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // things are not marked cachable. 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(brettw) we may want to consider more elaborate heuristics such as 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the cachability of the page. We may also want to consider subframes (this 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // test will still index subframes if the subframe is SSL). 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TODO(zelidrag) bug chromium-os:2808 - figure out if we want to reenable 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // content indexing for chromeos in some future releases. 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if !defined(OS_CHROMEOS) 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!url.SchemeIsSecure()) { 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Profile* p = profile(); 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (p && !p->IsOffTheRecord()) { 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen HistoryService* hs = p->GetHistoryService(Profile::IMPLICIT_ACCESS); 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (hs) 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen hs->SetPageContents(url, contents); 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TabContentsWrapper::OnJSOutOfMemory() { 287dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents()->AddInfoBar(new SimpleAlertInfoBarDelegate(tab_contents(), 288dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NULL, l10n_util::GetStringUTF16(IDS_JS_OUT_OF_MEMORY_PROMPT), true)); 289dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 290dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 291dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid TabContentsWrapper::OnRegisterProtocolHandler(const std::string& protocol, 292dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& url, 293dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const string16& title) { 294dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ProtocolHandlerRegistry* registry = profile()->GetProtocolHandlerRegistry(); 295dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ProtocolHandler* handler = 296dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ProtocolHandler::CreateProtocolHandler(protocol, url, title); 297dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if ((handler != NULL) && 298dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen registry->CanSchemeBeOverridden(handler->protocol())) { 299dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents()->AddInfoBar(registry->IsAlreadyRegistered(handler) ? 300dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen static_cast<InfoBarDelegate*>(new SimpleAlertInfoBarDelegate( 301dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab_contents(), NULL, l10n_util::GetStringFUTF16( 302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen IDS_REGISTER_PROTOCOL_HANDLER_ALREADY_REGISTERED, 303dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler->title(), UTF8ToUTF16(handler->protocol())), true)) : 304dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen new RegisterProtocolHandlerInfoBarDelegate(tab_contents(), registry, 305dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen handler)); 306dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 307dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 308dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TabContentsWrapper::OnMsgThumbnail(const GURL& url, 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ThumbnailScore& score, 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const SkBitmap& bitmap) { 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (profile()->IsOffTheRecord()) 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Tell History about this thumbnail 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen history::TopSites* ts = profile()->GetTopSites(); 317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (ts) 318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ts->SetPageThumbnail(url, bitmap, score); 319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 32172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TabContentsWrapper::UpdateStarredStateForCurrentURL() { 32272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen BookmarkModel* model = tab_contents()->profile()->GetBookmarkModel(); 32372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const bool old_state = is_starred_; 32472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen is_starred_ = (model && model->IsBookmarked(tab_contents()->GetURL())); 32572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 32672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (is_starred_ != old_state && delegate()) 32772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delegate()->URLStarredChanged(this, is_starred_); 328201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 329