tab_android.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/android/jni_string.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/android/chrome_web_contents_delegate_android.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/browser_process.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_tab_helper.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/net/net_error_tab_helper.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager_delegate_impl.h" 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/predictors/resource_prefetch_predictor_factory.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/predictors/resource_prefetch_predictor_tab_helper.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prerender/prerender_tab_helper.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/printing/print_view_manager_basic.h" 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/profiles/profile_android.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_tab_helper.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ssl/ssl_tab_helper.h" 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/sync/glue/synced_tab_delegate_android.h" 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/tab_contents/navigation_metrics_recorder.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/translate/translate_tab_helper.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/alternate_error_tab_observer.h" 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/android/content_settings/popup_blocked_infobar_delegate.h" 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/ui/android/context_menu_helper.h" 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/android/infobars/infobar_container_android.h" 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/android/tab_model/tab_model.h" 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/android/tab_model/tab_model_list.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/android/window_android_helper.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_tab_contents.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_tab_helper.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/prefs/prefs_tab_helper.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/core_tab_helper.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/toolbar/toolbar_model_impl.h" 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/content/browser/autofill_driver_impl.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/android/content_view_core.h" 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/navigation_entry.h" 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/notification_service.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "extensions/browser/view_type_utils.h" 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "jni/TabBase_jni.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/managed_mode/managed_mode_navigation_observer.h" 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTabHelpersInitializedUserDataKey[] = 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "TabAndroidTabHelpersInitialized"; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void BrowserTabContents::AttachTabHelpers(content::WebContents* contents) { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If already initialized, nothing to be done. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SupportsUserData::Data* initialization_tag = 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents->GetUserData(&kTabHelpersInitializedUserDataKey); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (initialization_tag) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Mark as initialized. 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents->SetUserData(&kTabHelpersInitializedUserDataKey, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new base::SupportsUserData::Data()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the view type. 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::SetViewType(contents, extensions::VIEW_TYPE_TAB_CONTENTS); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SessionTabHelper comes first because it sets up the tab ID, and other 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // helpers may rely on that. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionTabHelper::CreateForWebContents(contents); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AlternateErrorPageTabObserver::CreateForWebContents(contents); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill::TabAutofillManagerDelegate::CreateForWebContents(contents); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) autofill::AutofillDriverImpl::CreateForWebContentsAndDelegate( 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::TabAutofillManagerDelegate::FromWebContents(contents), 91a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) g_browser_process->GetApplicationLocale(), 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill::AutofillManager::ENABLE_AUTOFILL_DOWNLOAD_MANAGER); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkTabHelper::CreateForWebContents(contents); 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ContextMenuHelper::CreateForWebContents(contents); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoreTabHelper::CreateForWebContents(contents); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TabHelper::CreateForWebContents(contents); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconTabHelper::CreateForWebContents(contents); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindTabHelper::CreateForWebContents(contents); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryTabHelper::CreateForWebContents(contents); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::CreateForWebContents(contents); 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NavigationMetricsRecorder::CreateForWebContents(contents); 102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) chrome_browser_net::NetErrorTabHelper::CreateForWebContents(contents); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PasswordManagerDelegateImpl::CreateForWebContents(contents); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PasswordManager::CreateForWebContentsAndDelegate( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents, PasswordManagerDelegateImpl::FromWebContents(contents)); 106424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PopupBlockerTabHelper::CreateForWebContents(contents); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefsTabHelper::CreateForWebContents(contents); 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) prerender::PrerenderTabHelper::CreateForWebContentsWithPasswordManager( 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) contents, PasswordManager::FromWebContents(contents)); 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SingleTabModeTabHelper::CreateForWebContents(contents); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLTabHelper::CreateForWebContents(contents); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::CreateForWebContents(contents); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TranslateTabHelper::CreateForWebContents(contents); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowAndroidHelper::CreateForWebContents(contents); 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (predictors::ResourcePrefetchPredictorFactory::GetForProfile(profile)) { 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) predictors::ResourcePrefetchPredictorTabHelper::CreateForWebContents( 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contents); 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (profile->IsManaged()) 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ManagedModeNavigationObserver::CreateForWebContents(contents); 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// TODO(dtrainor): Refactor so we do not need this method. 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::InitTabHelpers(content::WebContents* contents) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserTabContents::AttachTabHelpers(contents); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) { 133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); 134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!core_tab_helper) 135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return NULL; 136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 137424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); 138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!core_delegate) 139424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return NULL; 140424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return static_cast<TabAndroid*>(core_delegate); 142424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 143424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 144424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TabAndroid* TabAndroid::GetNativeTab(JNIEnv* env, jobject obj) { 145424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return reinterpret_cast<TabAndroid*>(Java_TabBase_getNativePtr(env, obj)); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TabAndroid::TabAndroid(JNIEnv* env, jobject obj) 149424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : weak_java_tab_(env, obj), 150424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) session_tab_id_(), 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) synced_tab_delegate_(new browser_sync::SyncedTabDelegateAndroid(this)) { 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Java_TabBase_setNativePtr(env, obj, reinterpret_cast<intptr_t>(this)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TabAndroid::~TabAndroid() { 15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (obj.is_null()) 15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Java_TabBase_clearNativePtr(env, obj.obj()); 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)int TabAndroid::GetAndroidId() const { 1658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 1678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (obj.is_null()) 1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return -1; 1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return Java_TabBase_getId(env, obj.obj()); 1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)int TabAndroid::GetSyncId() const { 1730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 1750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (obj.is_null()) 1760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return 0; 1770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return Java_TabBase_getSyncId(env, obj.obj()); 1780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 1790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 TabAndroid::GetTitle() const { 1818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 1838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (obj.is_null()) 184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::string16(); 1858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return base::android::ConvertJavaStringToUTF16( 1868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Java_TabBase_getTitle(env, obj.obj())); 1878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)GURL TabAndroid::GetURL() const { 1908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 1928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (obj.is_null()) 1938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return GURL::EmptyGURL(); 1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return GURL(base::android::ConvertJavaStringToUTF8( 1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Java_TabBase_getUrl(env, obj.obj()))); 1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)bool TabAndroid::RestoreIfNeeded() { 1998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 2018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (obj.is_null()) 2028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return false; 2038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return Java_TabBase_restoreIfNeeded(env, obj.obj()); 2048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 2058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 206424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)content::ContentViewCore* TabAndroid::GetContentViewCore() const { 207424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!web_contents()) 208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return NULL; 209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return content::ContentViewCore::FromWebContents(web_contents()); 211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 213424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)Profile* TabAndroid::GetProfile() const { 214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!web_contents()) 215424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return NULL; 216424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 217424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 219424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)browser_sync::SyncedTabDelegate* TabAndroid::GetSyncedTabDelegate() const { 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return synced_tab_delegate_.get(); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void TabAndroid::SetSyncId(int sync_id) { 2250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_tab_.get(env); 2270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (obj.is_null()) 2280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 2290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Java_TabBase_setSyncId(env, obj.obj(), sync_id); 2300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 2310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 232424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::SwapTabContents(content::WebContents* old_contents, 233424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::WebContents* new_contents) { 234424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // We need to notify the native InfobarContainer so infobars can be swapped. 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) InfoBarContainerAndroid* infobar_container = 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) reinterpret_cast<InfoBarContainerAndroid*>( 2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_TabBase_getNativeInfoBarContainer( 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) env, 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_java_tab_.get(env).obj())); 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) InfoBarService* new_infobar_service = new_contents ? 2434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) InfoBarService::FromWebContents(new_contents) : NULL; 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) infobar_container->ChangeInfoBarService(new_infobar_service); 2454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 246424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Java_TabBase_swapWebContents( 247424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) env, 248424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) weak_java_tab_.get(env).obj(), 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) reinterpret_cast<intptr_t>(new_contents)); 250424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void TabAndroid::Observe(int type, 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const content::NotificationSource& source, 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const content::NotificationDetails& details) { 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) switch (type) { 25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED: { 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TabSpecificContentSettings* settings = 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!settings->IsBlockageIndicated(CONTENT_SETTINGS_TYPE_POPUPS)) { 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // TODO(dfalcantara): Create an InfoBarDelegate to keep the 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // PopupBlockedInfoBar logic native-side instead of straddling the JNI 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // boundary. 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int num_popups = 0; 26558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PopupBlockerTabHelper* popup_blocker_helper = 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PopupBlockerTabHelper::FromWebContents(web_contents()); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (popup_blocker_helper) 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) num_popups = popup_blocker_helper->GetBlockedPopupsCount(); 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (num_popups > 0) { 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PopupBlockedInfoBarDelegate::Create( 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InfoBarService::FromWebContents(web_contents()), 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) num_popups); 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) settings->SetBlockageHasBeenIndicated(CONTENT_SETTINGS_TYPE_POPUPS); 27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 27958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case chrome::NOTIFICATION_FAVICON_UPDATED: 28158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Java_TabBase_onFaviconUpdated(env, weak_java_tab_.get(env).obj()); 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) default: 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NOTREACHED() << "Unexpected notification " << type; 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) break; 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::InitWebContents(JNIEnv* env, 290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jobject obj, 291424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jboolean incognito, 292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jobject jcontent_view_core, 293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jobject jweb_contents_delegate, 294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jobject jcontext_menu_populator) { 295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::ContentViewCore* content_view_core = 296424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) content::ContentViewCore::GetNativeContentViewCore(env, 297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jcontent_view_core); 298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(content_view_core); 299424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DCHECK(content_view_core->GetWebContents()); 300424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 301424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents_.reset(content_view_core->GetWebContents()); 302424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) InitTabHelpers(web_contents_.get()); 303424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) session_tab_id_.set_id( 305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SessionTabHelper::FromWebContents(web_contents())->session_id().id()); 306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ContextMenuHelper::FromWebContents(web_contents())->SetPopulator( 307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jcontext_menu_populator); 308424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) WindowAndroidHelper::FromWebContents(web_contents())-> 309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) SetWindowAndroid(content_view_core->GetWindowAndroid()); 310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CoreTabHelper::FromWebContents(web_contents())->set_delegate(this); 311424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents_delegate_.reset( 312424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new chrome::android::ChromeWebContentsDelegateAndroid( 313424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) env, jweb_contents_delegate)); 314424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents_delegate_->LoadProgressChanged(web_contents(), 0); 315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents()->SetDelegate(web_contents_delegate_.get()); 316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 31758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) notification_registrar_.Add( 31858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this, 31958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 32058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::Source<content::WebContents>(web_contents())); 32158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) notification_registrar_.Add( 32258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this, 32358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_FAVICON_UPDATED, 32458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::Source<content::WebContents>(web_contents())); 32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) synced_tab_delegate_->SetWebContents(web_contents()); 32758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Set the window ID if there is a valid TabModel. 32958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TabModel* model = TabModelList::GetTabModelWithProfile(GetProfile()); 33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (model) { 33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SessionID window_id; 33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) window_id.set_id(model->GetSessionId()); 33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SessionTabHelper* session_tab_helper = 33558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SessionTabHelper::FromWebContents(web_contents()); 33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) session_tab_helper->SetWindowID(window_id); 33758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 339424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Verify that the WebContents this tab represents matches the expected 340424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // off the record state. 341424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CHECK_EQ(GetProfile()->IsOffTheRecord(), incognito); 342424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 343424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 344424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void TabAndroid::DestroyWebContents(JNIEnv* env, 345424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jobject obj, 346424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jboolean delete_native) { 34758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(web_contents()); 34858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 34958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) notification_registrar_.Remove( 35058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this, 35158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 35258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::Source<content::WebContents>(web_contents())); 35358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) notification_registrar_.Remove( 35458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) this, 35558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chrome::NOTIFICATION_FAVICON_UPDATED, 35658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::Source<content::WebContents>(web_contents())); 35758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 358424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents()->SetDelegate(NULL); 359424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (delete_native) { 361424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents_.reset(); 36258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) synced_tab_delegate_->ResetWebContents(); 363424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } else { 364424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Release the WebContents so it does not get deleted by the scoped_ptr. 365424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ignore_result(web_contents_.release()); 366424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 367424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 368424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 369424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)base::android::ScopedJavaLocalRef<jobject> TabAndroid::GetProfileAndroid( 370424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) JNIEnv* env, 371424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jobject obj) { 372424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Profile* profile = GetProfile(); 373424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!profile) 374424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return base::android::ScopedJavaLocalRef<jobject>(); 375424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ProfileAndroid* profile_android = ProfileAndroid::FromProfile(profile); 376424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!profile_android) 377424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return base::android::ScopedJavaLocalRef<jobject>(); 378424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 379424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return profile_android->GetJavaObject(); 380424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 381424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 38258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)ToolbarModel::SecurityLevel TabAndroid::GetSecurityLevel(JNIEnv* env, 38358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) jobject obj) { 38458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return ToolbarModelImpl::GetSecurityLevelForWebContents(web_contents()); 38558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 38658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void TabAndroid::SetActiveNavigationEntryTitleForUrl(JNIEnv* env, 3884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jobject obj, 3894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jstring jurl, 3904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jstring jtitle) { 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(web_contents()); 3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 3944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (jtitle) 3954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) title = base::android::ConvertJavaStringToUTF16(env, jtitle); 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string url; 3984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (jurl) 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) url = base::android::ConvertJavaStringToUTF8(env, jurl); 4004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::NavigationEntry* entry = 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_contents()->GetController().GetVisibleEntry(); 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (entry && url == entry->GetVirtualURL().spec()) 4044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) entry->SetTitle(title); 4054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool TabAndroid::Print(JNIEnv* env, jobject obj) { 408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!web_contents()) 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) printing::PrintViewManagerBasic::CreateForWebContents(web_contents()); 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) printing::PrintViewManagerBasic* print_view_manager = 413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) printing::PrintViewManagerBasic::FromWebContents(web_contents()); 414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (print_view_manager == NULL) 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) print_view_manager->PrintNow(); 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool TabAndroid::RegisterTabAndroid(JNIEnv* env) { 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return RegisterNativesImpl(env); 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 424