tab_android.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/android/tab_android.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_tab_helper.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager_delegate_impl.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prerender/prerender_tab_helper.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_tab_helper.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_tab_helper.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/translate/translate_tab_helper.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/alternate_error_tab_observer.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/android/window_android_helper.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_tab_contents.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_tab_helper.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/prefs/prefs_tab_helper.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/core_tab_helper.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/toolbar/toolbar_model_impl.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/view_type_utils.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/autofill/browser/autofill_external_delegate.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/autofill/browser/autofill_manager.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/android/content_view_core.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::WebContents; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTabHelpersInitializedUserDataKey[] = 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "TabAndroidTabHelpersInitialized"; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BrowserTabContents::AttachTabHelpers(WebContents* contents) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If already initialized, nothing to be done. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SupportsUserData::Data* initialization_tag = 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents->GetUserData(&kTabHelpersInitializedUserDataKey); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (initialization_tag) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Mark as initialized. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents->SetUserData(&kTabHelpersInitializedUserDataKey, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::SupportsUserData::Data()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the view type. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::SetViewType(contents, chrome::VIEW_TYPE_TAB_CONTENTS); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SessionTabHelper comes first because it sets up the tab ID, and other 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // helpers may rely on that. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTabHelper::CreateForWebContents(contents); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AlternateErrorPageTabObserver::CreateForWebContents(contents); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill::TabAutofillManagerDelegate::CreateForWebContents(contents); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillManager::CreateForWebContentsAndDelegate( 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill::TabAutofillManagerDelegate::FromWebContents(contents)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillExternalDelegate::CreateForWebContentsAndManager( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents, AutofillManager::FromWebContents(contents)); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillManager::FromWebContents(contents)->SetExternalDelegate( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillExternalDelegate::FromWebContents(contents)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BlockedContentTabHelper::CreateForWebContents(contents); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkTabHelper::CreateForWebContents(contents); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelper::CreateForWebContents(contents); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TabHelper::CreateForWebContents(contents); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconTabHelper::CreateForWebContents(contents); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindTabHelper::CreateForWebContents(contents); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryTabHelper::CreateForWebContents(contents); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::CreateForWebContents(contents); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PasswordManagerDelegateImpl::CreateForWebContents(contents); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PasswordManager::CreateForWebContentsAndDelegate( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents, PasswordManagerDelegateImpl::FromWebContents(contents)); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefsTabHelper::CreateForWebContents(contents); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prerender::PrerenderTabHelper::CreateForWebContents(contents); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLTabHelper::CreateForWebContents(contents); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabContentsSyncedTabDelegate::CreateForWebContents(contents); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::CreateForWebContents(contents); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TranslateTabHelper::CreateForWebContents(contents); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowAndroidHelper::CreateForWebContents(contents); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TabAndroid::InitTabHelpers(WebContents* contents) { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserTabContents::AttachTabHelpers(contents); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebContents* TabAndroid::InitWebContentsFromView(JNIEnv* env, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject content_view) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContentViewCore* content_view_core = 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContentViewCore::GetNativeContentViewCore(env, content_view); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(content_view_core); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents = content_view_core->GetWebContents(); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(web_contents); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InitTabHelpers(web_contents); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return web_contents; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabAndroid::TabAndroid() : tab_id_(-1) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabAndroid::~TabAndroid() { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)content::WebContents* TabAndroid::GetWebContents() { 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ToolbarModel::SecurityLevel TabAndroid::GetSecurityLevel() { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ToolbarModelImpl::GetSecurityLevelForWebContents(GetWebContents()); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabAndroid::RunExternalProtocolDialog(const GURL& url) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 121