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