Chromium Code Reviews| Index: content/browser/android/content_view_core_impl.cc |
| diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc |
| index 0e7e53ecd062f22adeb47802398a9810a556d574..56f1126eb7e1cbfb1b98ce14f24ecc9c23311bf7 100644 |
| --- a/content/browser/android/content_view_core_impl.cc |
| +++ b/content/browser/android/content_view_core_impl.cc |
| @@ -55,6 +55,7 @@ |
| #include "jni/DragEvent_jni.h" |
| #include "third_party/WebKit/public/platform/WebInputEvent.h" |
| #include "ui/android/view_android.h" |
| +#include "ui/android/view_root.h" |
| #include "ui/android/window_android.h" |
| #include "ui/base/clipboard/clipboard.h" |
| #include "ui/base/ui_base_switches_util.h" |
| @@ -274,19 +275,20 @@ ContentViewCoreImpl::~ContentViewCoreImpl() { |
| void ContentViewCoreImpl::UpdateWindowAndroid( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& obj, |
| + const base::android::JavaParamRef<jobject>& jview_root, |
| jlong window_android) { |
| - ui::ViewAndroid* view = GetViewAndroid(); |
| ui::WindowAndroid* window = |
|
boliu
2017/01/04 18:58:06
should DCHECK that window and view root are either
Jinsuk Kim
2017/01/05 11:03:12
Renamed to UpdateViewRoot.
|
| reinterpret_cast<ui::WindowAndroid*>(window_android); |
| if (window == GetWindowAndroid()) |
|
boliu
2017/01/04 18:58:05
this is not enough, what if view_root is different
Jinsuk Kim
2017/01/05 11:03:12
Used view_root instead. ViewRoot and WA always com
|
| return; |
| + ui::ViewAndroid* view = GetViewAndroid(); |
| + view->RemoveFromParent(); |
|
boliu
2017/01/04 18:58:06
Remove/AddChild should stay where they used to be
Jinsuk Kim
2017/01/05 11:03:12
Done.
|
| + ui::ViewRoot::FromJavaObject(env, jview_root)->AddChild(view); |
|
boliu
2017/01/04 18:58:05
probably should match WindowAndroid pattern here t
Jinsuk Kim
2017/01/05 11:03:12
Done.
|
| if (GetWindowAndroid()) { |
| for (auto& observer : observer_list_) |
| observer.OnDetachedFromWindow(); |
| - view->RemoveFromParent(); |
| } |
| if (window) { |
| - window->AddChild(view); |
| for (auto& observer : observer_list_) |
| observer.OnAttachedToWindow(); |
| } |
| @@ -1532,7 +1534,7 @@ jlong Init(JNIEnv* env, |
| const JavaParamRef<jobject>& obj, |
| const JavaParamRef<jobject>& jweb_contents, |
| const JavaParamRef<jobject>& jview_android_delegate, |
| - jlong jwindow_android, |
| + const JavaParamRef<jobject>& jview_root, |
| jfloat dipScale, |
| const JavaParamRef<jobject>& retained_objects_set) { |
| WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
| @@ -1542,11 +1544,7 @@ jlong Init(JNIEnv* env, |
| ui::ViewAndroid* view_android = web_contents->GetView()->GetNativeView(); |
| view_android->SetDelegate(jview_android_delegate); |
| view_android->SetLayer(cc::Layer::Create()); |
| - |
| - ui::WindowAndroid* window_android = |
| - reinterpret_cast<ui::WindowAndroid*>(jwindow_android); |
| - DCHECK(window_android); |
| - window_android->AddChild(view_android); |
| + ui::ViewRoot::FromJavaObject(env, jview_root)->AddChild(view_android); |
| // TODO: pass dipScale. |
| ContentViewCoreImpl* view = new ContentViewCoreImpl( |