tab_android.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
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"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/android/jni_android.h"
8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/android/chrome_web_contents_delegate_android.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/browser_process.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_tab_helper.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager_delegate_impl.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prerender/prerender_tab_helper.h"
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/profiles/profile_android.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_tab_helper.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_tab_helper.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/translate/translate_tab_helper.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/alternate_error_tab_observer.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/android/window_android_helper.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_tab_contents.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_tab_helper.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/content/browser/autofill_driver_impl.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/android/content_view_core.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/browser/view_type_utils.h"
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "jni/TabBase_jni.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTabHelpersInitializedUserDataKey[] =
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "TabAndroidTabHelpersInitialized";
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void BrowserTabContents::AttachTabHelpers(content::WebContents* contents) {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If already initialized, nothing to be done.
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::SupportsUserData::Data* initialization_tag =
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      contents->GetUserData(&kTabHelpersInitializedUserDataKey);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (initialization_tag)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Mark as initialized.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  contents->SetUserData(&kTabHelpersInitializedUserDataKey,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            new base::SupportsUserData::Data());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set the view type.
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  extensions::SetViewType(contents, extensions::VIEW_TYPE_TAB_CONTENTS);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SessionTabHelper comes first because it sets up the tab ID, and other
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // helpers may rely on that.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SessionTabHelper::CreateForWebContents(contents);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AlternateErrorPageTabObserver::CreateForWebContents(contents);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  autofill::TabAutofillManagerDelegate::CreateForWebContents(contents);
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  autofill::AutofillDriverImpl::CreateForWebContentsAndDelegate(
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      contents,
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      autofill::TabAutofillManagerDelegate::FromWebContents(contents),
70a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      g_browser_process->GetApplicationLocale(),
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      autofill::AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BlockedContentTabHelper::CreateForWebContents(contents);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BookmarkTabHelper::CreateForWebContents(contents);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CoreTabHelper::CreateForWebContents(contents);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  extensions::TabHelper::CreateForWebContents(contents);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FaviconTabHelper::CreateForWebContents(contents);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FindTabHelper::CreateForWebContents(contents);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HistoryTabHelper::CreateForWebContents(contents);
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  InfoBarService::CreateForWebContents(contents);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PasswordManagerDelegateImpl::CreateForWebContents(contents);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PasswordManager::CreateForWebContentsAndDelegate(
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      contents, PasswordManagerDelegateImpl::FromWebContents(contents));
83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  PopupBlockerTabHelper::CreateForWebContents(contents);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefsTabHelper::CreateForWebContents(contents);
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  prerender::PrerenderTabHelper::CreateForWebContentsWithPasswordManager(
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      contents, PasswordManager::FromWebContents(contents));
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SSLTabHelper::CreateForWebContents(contents);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabSpecificContentSettings::CreateForWebContents(contents);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TranslateTabHelper::CreateForWebContents(contents);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WindowAndroidHelper::CreateForWebContents(contents);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
93424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// TODO(dtrainor): Refactor so we do not need this method.
94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::InitTabHelpers(content::WebContents* contents) {
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserTabContents::AttachTabHelpers(contents);
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
98424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) {
99424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents);
100424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!core_tab_helper)
101424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return NULL;
102424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
103424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate();
104424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!core_delegate)
105424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return NULL;
106424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return static_cast<TabAndroid*>(core_delegate);
108424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
109424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TabAndroid* TabAndroid::GetNativeTab(JNIEnv* env, jobject obj) {
111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return reinterpret_cast<TabAndroid*>(Java_TabBase_getNativePtr(env, obj));
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
114424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TabAndroid::TabAndroid(JNIEnv* env, jobject obj)
115424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : weak_java_tab_(env, obj),
116424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      session_tab_id_(),
117424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      android_tab_id_(-1) {
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Java_TabBase_setNativePtr(env, obj, reinterpret_cast<jint>(this));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
121424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)content::ContentViewCore* TabAndroid::GetContentViewCore() const {
122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!web_contents())
123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return NULL;
124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return content::ContentViewCore::FromWebContents(web_contents());
126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)Profile* TabAndroid::GetProfile() const {
129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!web_contents())
130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return NULL;
131424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return Profile::FromBrowserContext(web_contents()->GetBrowserContext());
133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TabAndroid::~TabAndroid() {
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  JNIEnv* env = base::android::AttachCurrentThread();
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env);
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (obj.is_null())
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  Java_TabBase_clearNativePtr(env, obj.obj());
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ToolbarModel::SecurityLevel TabAndroid::GetSecurityLevel() {
145424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return ToolbarModelImpl::GetSecurityLevelForWebContents(web_contents());
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TabAndroid::RunExternalProtocolDialog(const GURL& url) {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
151424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::SwapTabContents(content::WebContents* old_contents,
152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                 content::WebContents* new_contents) {
153424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  JNIEnv* env = base::android::AttachCurrentThread();
154424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  Java_TabBase_swapWebContents(
155424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      env,
156424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      weak_java_tab_.get(env).obj(),
157424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      reinterpret_cast<jint>(new_contents));
158424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
159424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
160424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::InitWebContents(JNIEnv* env,
161424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                 jobject obj,
162424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                 jint tab_id,
163424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                 jboolean incognito,
164424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                 jobject jcontent_view_core,
165424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                 jobject jweb_contents_delegate) {
166424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  android_tab_id_ = tab_id;
167424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
168424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::ContentViewCore* content_view_core =
169424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::ContentViewCore::GetNativeContentViewCore(env,
170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                                         jcontent_view_core);
171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DCHECK(content_view_core);
172424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DCHECK(content_view_core->GetWebContents());
173424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
174424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  web_contents_.reset(content_view_core->GetWebContents());
175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  InitTabHelpers(web_contents_.get());
176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  session_tab_id_.set_id(
178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      SessionTabHelper::FromWebContents(web_contents())->session_id().id());
179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  WindowAndroidHelper::FromWebContents(web_contents())->
180424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      SetWindowAndroid(content_view_core->GetWindowAndroid());
181424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CoreTabHelper::FromWebContents(web_contents())->set_delegate(this);
182424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  web_contents_delegate_.reset(
183424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      new chrome::android::ChromeWebContentsDelegateAndroid(
184424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          env, jweb_contents_delegate));
185424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  web_contents_delegate_->LoadProgressChanged(web_contents(), 0);
186424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  web_contents()->SetDelegate(web_contents_delegate_.get());
187424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
188424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Verify that the WebContents this tab represents matches the expected
189424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // off the record state.
190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CHECK_EQ(GetProfile()->IsOffTheRecord(), incognito);
191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
192424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
193424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::DestroyWebContents(JNIEnv* env,
194424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                    jobject obj,
195424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                                    jboolean delete_native) {
196424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  web_contents()->SetDelegate(NULL);
197424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
198424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (delete_native) {
199424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    web_contents_.reset();
200424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  } else {
201424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    // Release the WebContents so it does not get deleted by the scoped_ptr.
202424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ignore_result(web_contents_.release());
203424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
204424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
205424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
206424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::android::ScopedJavaLocalRef<jobject> TabAndroid::GetProfileAndroid(
207424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    JNIEnv* env,
208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    jobject obj) {
209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  Profile* profile = GetProfile();
210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!profile)
211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return base::android::ScopedJavaLocalRef<jobject>();
212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ProfileAndroid* profile_android = ProfileAndroid::FromProfile(profile);
213424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!profile_android)
214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return base::android::ScopedJavaLocalRef<jobject>();
215424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
216424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return profile_android->GetJavaObject();
217424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool TabAndroid::RegisterTabAndroid(JNIEnv* env) {
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return RegisterNativesImpl(env);
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
222