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