OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/android/tab_android.h" | 5 #include "chrome/browser/android/tab_android.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 #include "ui/base/window_open_disposition.h" | 92 #include "ui/base/window_open_disposition.h" |
93 #include "ui/display/display.h" | 93 #include "ui/display/display.h" |
94 #include "ui/display/screen.h" | 94 #include "ui/display/screen.h" |
95 #include "ui/gfx/android/java_bitmap.h" | 95 #include "ui/gfx/android/java_bitmap.h" |
96 #include "ui/gfx/favicon_size.h" | 96 #include "ui/gfx/favicon_size.h" |
97 #include "ui/gfx/image/image_skia.h" | 97 #include "ui/gfx/image/image_skia.h" |
98 | 98 |
99 using base::android::AttachCurrentThread; | 99 using base::android::AttachCurrentThread; |
100 using base::android::ConvertUTF8ToJavaString; | 100 using base::android::ConvertUTF8ToJavaString; |
101 using base::android::JavaParamRef; | 101 using base::android::JavaParamRef; |
| 102 using base::android::JavaRef; |
102 using content::BrowserThread; | 103 using content::BrowserThread; |
103 using content::GlobalRequestID; | 104 using content::GlobalRequestID; |
104 using content::NavigationController; | 105 using content::NavigationController; |
105 using content::WebContents; | 106 using content::WebContents; |
106 using navigation_interception::InterceptNavigationDelegate; | 107 using navigation_interception::InterceptNavigationDelegate; |
107 using navigation_interception::NavigationParams; | 108 using navigation_interception::NavigationParams; |
108 | 109 |
109 TabAndroid* TabAndroid::FromWebContents( | 110 TabAndroid* TabAndroid::FromWebContents( |
110 const content::WebContents* web_contents) { | 111 const content::WebContents* web_contents) { |
111 const CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents( | 112 const CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents( |
112 web_contents); | 113 web_contents); |
113 if (!core_tab_helper) | 114 if (!core_tab_helper) |
114 return NULL; | 115 return NULL; |
115 | 116 |
116 CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); | 117 CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); |
117 if (!core_delegate) | 118 if (!core_delegate) |
118 return NULL; | 119 return NULL; |
119 | 120 |
120 return static_cast<TabAndroid*>(core_delegate); | 121 return static_cast<TabAndroid*>(core_delegate); |
121 } | 122 } |
122 | 123 |
123 TabAndroid* TabAndroid::GetNativeTab(JNIEnv* env, jobject obj) { | 124 TabAndroid* TabAndroid::GetNativeTab(JNIEnv* env, const JavaRef<jobject>& obj) { |
124 return reinterpret_cast<TabAndroid*>(Java_Tab_getNativePtr(env, obj)); | 125 return reinterpret_cast<TabAndroid*>(Java_Tab_getNativePtr(env, obj)); |
125 } | 126 } |
126 | 127 |
127 void TabAndroid::AttachTabHelpers(content::WebContents* web_contents) { | 128 void TabAndroid::AttachTabHelpers(content::WebContents* web_contents) { |
128 DCHECK(web_contents); | 129 DCHECK(web_contents); |
129 | 130 |
130 TabHelpers::AttachTabHelpers(web_contents); | 131 TabHelpers::AttachTabHelpers(web_contents); |
131 } | 132 } |
132 | 133 |
133 TabAndroid::TabAndroid(JNIEnv* env, jobject obj) | 134 TabAndroid::TabAndroid(JNIEnv* env, const JavaRef<jobject>& obj) |
134 : weak_java_tab_(env, obj), | 135 : weak_java_tab_(env, obj), |
135 content_layer_(cc::Layer::Create()), | 136 content_layer_(cc::Layer::Create()), |
136 tab_content_manager_(NULL), | 137 tab_content_manager_(NULL), |
137 synced_tab_delegate_(new browser_sync::SyncedTabDelegateAndroid(this)) { | 138 synced_tab_delegate_(new browser_sync::SyncedTabDelegateAndroid(this)) { |
138 Java_Tab_setNativePtr(env, obj, reinterpret_cast<intptr_t>(this)); | 139 Java_Tab_setNativePtr(env, obj, reinterpret_cast<intptr_t>(this)); |
139 } | 140 } |
140 | 141 |
141 TabAndroid::~TabAndroid() { | 142 TabAndroid::~TabAndroid() { |
142 GetContentLayer()->RemoveAllChildren(); | 143 GetContentLayer()->RemoveAllChildren(); |
143 JNIEnv* env = base::android::AttachCurrentThread(); | 144 JNIEnv* env = base::android::AttachCurrentThread(); |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 delete this; | 362 delete this; |
362 } | 363 } |
363 | 364 |
364 void TabAndroid::InitWebContents( | 365 void TabAndroid::InitWebContents( |
365 JNIEnv* env, | 366 JNIEnv* env, |
366 const JavaParamRef<jobject>& obj, | 367 const JavaParamRef<jobject>& obj, |
367 jboolean incognito, | 368 jboolean incognito, |
368 const JavaParamRef<jobject>& jweb_contents, | 369 const JavaParamRef<jobject>& jweb_contents, |
369 const JavaParamRef<jobject>& jweb_contents_delegate, | 370 const JavaParamRef<jobject>& jweb_contents_delegate, |
370 const JavaParamRef<jobject>& jcontext_menu_populator) { | 371 const JavaParamRef<jobject>& jcontext_menu_populator) { |
371 web_contents_.reset( | 372 web_contents_.reset(content::WebContents::FromJavaWebContents(jweb_contents)); |
372 content::WebContents::FromJavaWebContents(jweb_contents.obj())); | |
373 DCHECK(web_contents_.get()); | 373 DCHECK(web_contents_.get()); |
374 | 374 |
375 AttachTabHelpers(web_contents_.get()); | 375 AttachTabHelpers(web_contents_.get()); |
376 | 376 |
377 SetWindowSessionID(session_window_id_.id()); | 377 SetWindowSessionID(session_window_id_.id()); |
378 | 378 |
379 session_tab_id_.set_id( | 379 session_tab_id_.set_id( |
380 SessionTabHelper::FromWebContents(web_contents())->session_id().id()); | 380 SessionTabHelper::FromWebContents(web_contents())->session_id().id()); |
381 ContextMenuHelper::FromWebContents(web_contents())->SetPopulator( | 381 ContextMenuHelper::FromWebContents(web_contents())->SetPopulator( |
382 jcontext_menu_populator); | 382 jcontext_menu_populator); |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 if (tab_content_manager_) | 884 if (tab_content_manager_) |
885 tab_content_manager_->AttachLiveLayer(GetAndroidId(), GetContentLayer()); | 885 tab_content_manager_->AttachLiveLayer(GetAndroidId(), GetContentLayer()); |
886 } | 886 } |
887 | 887 |
888 void TabAndroid::AttachOverlayWebContents( | 888 void TabAndroid::AttachOverlayWebContents( |
889 JNIEnv* env, | 889 JNIEnv* env, |
890 const JavaParamRef<jobject>& obj, | 890 const JavaParamRef<jobject>& obj, |
891 const JavaParamRef<jobject>& jweb_contents, | 891 const JavaParamRef<jobject>& jweb_contents, |
892 jboolean visible) { | 892 jboolean visible) { |
893 WebContents* web_contents = | 893 WebContents* web_contents = |
894 content::WebContents::FromJavaWebContents(jweb_contents.obj()); | 894 content::WebContents::FromJavaWebContents(jweb_contents); |
895 DCHECK(web_contents); | 895 DCHECK(web_contents); |
896 DCHECK(web_contents->GetNativeView()); | 896 DCHECK(web_contents->GetNativeView()); |
897 | 897 |
898 web_contents->GetNativeView()->GetLayer()->SetHideLayerAndSubtree(!visible); | 898 web_contents->GetNativeView()->GetLayer()->SetHideLayerAndSubtree(!visible); |
899 content_layer_->AddChild(web_contents->GetNativeView()->GetLayer()); | 899 content_layer_->AddChild(web_contents->GetNativeView()->GetLayer()); |
900 } | 900 } |
901 | 901 |
902 void TabAndroid::DetachOverlayWebContents( | 902 void TabAndroid::DetachOverlayWebContents( |
903 JNIEnv* env, | 903 JNIEnv* env, |
904 const JavaParamRef<jobject>& obj, | 904 const JavaParamRef<jobject>& obj, |
905 const JavaParamRef<jobject>& jweb_contents) { | 905 const JavaParamRef<jobject>& jweb_contents) { |
906 WebContents* web_contents = | 906 WebContents* web_contents = |
907 content::WebContents::FromJavaWebContents(jweb_contents.obj()); | 907 content::WebContents::FromJavaWebContents(jweb_contents); |
908 DCHECK(web_contents); | 908 DCHECK(web_contents); |
909 DCHECK(web_contents->GetNativeView()); | 909 DCHECK(web_contents->GetNativeView()); |
910 | 910 |
911 if (web_contents->GetNativeView()->GetLayer()->parent() == content_layer_) | 911 if (web_contents->GetNativeView()->GetLayer()->parent() == content_layer_) |
912 web_contents->GetNativeView()->GetLayer()->RemoveFromParent(); | 912 web_contents->GetNativeView()->GetLayer()->RemoveFromParent(); |
913 } | 913 } |
914 | 914 |
915 static void Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 915 static void Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
916 TRACE_EVENT0("native", "TabAndroid::Init"); | 916 TRACE_EVENT0("native", "TabAndroid::Init"); |
917 // This will automatically bind to the Java object and pass ownership there. | 917 // This will automatically bind to the Java object and pass ownership there. |
918 new TabAndroid(env, obj); | 918 new TabAndroid(env, obj); |
919 } | 919 } |
920 | 920 |
921 // static | 921 // static |
922 bool TabAndroid::RegisterTabAndroid(JNIEnv* env) { | 922 bool TabAndroid::RegisterTabAndroid(JNIEnv* env) { |
923 return RegisterNativesImpl(env); | 923 return RegisterNativesImpl(env); |
924 } | 924 } |
OLD | NEW |