Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Side by Side Diff: content/browser/android/content_view_core_impl.cc

Issue 1728193002: Support dragging texts into Android WebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "content/browser/android/content_view_core_impl.h" 5 #include "content/browser/android/content_view_core_impl.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_array.h" 10 #include "base/android/jni_array.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 #include "content/public/browser/ssl_host_state_delegate.h" 47 #include "content/public/browser/ssl_host_state_delegate.h"
48 #include "content/public/browser/web_contents.h" 48 #include "content/public/browser/web_contents.h"
49 #include "content/public/common/content_client.h" 49 #include "content/public/common/content_client.h"
50 #include "content/public/common/content_switches.h" 50 #include "content/public/common/content_switches.h"
51 #include "content/public/common/menu_item.h" 51 #include "content/public/common/menu_item.h"
52 #include "content/public/common/user_agent.h" 52 #include "content/public/common/user_agent.h"
53 #include "jni/ContentViewCore_jni.h" 53 #include "jni/ContentViewCore_jni.h"
54 #include "third_party/WebKit/public/web/WebInputEvent.h" 54 #include "third_party/WebKit/public/web/WebInputEvent.h"
55 #include "ui/android/view_android.h" 55 #include "ui/android/view_android.h"
56 #include "ui/android/window_android.h" 56 #include "ui/android/window_android.h"
57 #include "ui/base/dragdrop/drop_target_event.h"
58 #include "ui/base/dragdrop/os_exchange_data_provider_android.h"
57 #include "ui/events/android/motion_event_android.h" 59 #include "ui/events/android/motion_event_android.h"
58 #include "ui/gfx/android/java_bitmap.h" 60 #include "ui/gfx/android/java_bitmap.h"
59 #include "ui/gfx/geometry/point_conversions.h" 61 #include "ui/gfx/geometry/point_conversions.h"
60 #include "ui/gfx/geometry/size_conversions.h" 62 #include "ui/gfx/geometry/size_conversions.h"
61 #include "ui/gfx/geometry/size_f.h" 63 #include "ui/gfx/geometry/size_f.h"
62 64
63 using base::android::AttachCurrentThread; 65 using base::android::AttachCurrentThread;
64 using base::android::ConvertJavaStringToUTF16; 66 using base::android::ConvertJavaStringToUTF16;
65 using base::android::ConvertJavaStringToUTF8; 67 using base::android::ConvertJavaStringToUTF8;
66 using base::android::ConvertUTF16ToJavaString; 68 using base::android::ConvertUTF16ToJavaString;
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 const JavaParamRef<jobject>& jobj, 1404 const JavaParamRef<jobject>& jobj,
1403 jboolean opaque) { 1405 jboolean opaque) {
1404 if (GetRenderWidgetHostViewAndroid()) { 1406 if (GetRenderWidgetHostViewAndroid()) {
1405 if (opaque) 1407 if (opaque)
1406 GetRenderWidgetHostViewAndroid()->SetBackgroundColorToDefault(); 1408 GetRenderWidgetHostViewAndroid()->SetBackgroundColorToDefault();
1407 else 1409 else
1408 GetRenderWidgetHostViewAndroid()->SetBackgroundColor(SK_ColorTRANSPARENT); 1410 GetRenderWidgetHostViewAndroid()->SetBackgroundColor(SK_ColorTRANSPARENT);
1409 } 1411 }
1410 } 1412 }
1411 1413
1414 void ContentViewCoreImpl::OnDragEntered(
1415 JNIEnv* env,
1416 const base::android::JavaParamRef<jobject>& jobj,
1417 int x,
1418 int y,
1419 int screen_x,
1420 int screen_y) {
1421 WebContentsViewAndroid* wcva = static_cast<WebContentsViewAndroid*>(
1422 static_cast<WebContentsImpl*>(web_contents())->GetView());
1423
1424 ui::OSExchangeData data(new ui::OSExchangeDataProviderAndroid());
dcheng 2016/02/25 01:18:49 Will there be a followup patch to address the fact
hush (inactive) 2016/02/25 02:40:48 Types are sort of plumbed through. We only support
dcheng 2016/02/25 21:13:38 I don't think I follow: I don't see how the types
hush (inactive) 2016/02/27 01:47:22 Sorry yeah you're right. I just updated the logic
1425 ui::DropTargetEvent event(
1426 data, gfx::Point(x, y), gfx::Point(screen_x, screen_y),
1427 ui::DragDropTypes::DRAG_COPY); // Android drag and drop does only copy.
1428
1429 wcva->OnDragEntered(event);
1430 }
1431
1432 void ContentViewCoreImpl::OnDragUpdated(
1433 JNIEnv* env,
1434 const base::android::JavaParamRef<jobject>& jobj,
1435 int x,
1436 int y,
1437 int screen_x,
1438 int screen_y) {
1439 WebContentsViewAndroid* wcva = static_cast<WebContentsViewAndroid*>(
1440 static_cast<WebContentsImpl*>(web_contents())->GetView());
1441
1442 ui::OSExchangeData data(new ui::OSExchangeDataProviderAndroid());
1443 ui::DropTargetEvent event(
1444 data, gfx::Point(x, y), gfx::Point(screen_x, screen_y),
1445 ui::DragDropTypes::DRAG_COPY); // Android drag and drop does only copy.
1446
1447 wcva->OnDragUpdated(event);
1448 }
1449
1450 void ContentViewCoreImpl::OnPerformDrop(
1451 JNIEnv* env,
1452 const base::android::JavaParamRef<jobject>& jobj,
1453 int x,
1454 int y,
1455 int screen_x,
1456 int screen_y,
1457 const base::android::JavaParamRef<jstring>& content) {
1458 base::string16 text_to_drop = ConvertJavaStringToUTF16(env, content);
1459
1460 WebContentsViewAndroid* wcva = static_cast<WebContentsViewAndroid*>(
1461 static_cast<WebContentsImpl*>(web_contents())->GetView());
1462
1463 ui::OSExchangeData data(new ui::OSExchangeDataProviderAndroid());
1464 data.SetString(text_to_drop);
1465 ui::DropTargetEvent event(data, gfx::Point(x, y),
1466 gfx::Point(screen_x, screen_y),
1467 ui::DragDropTypes::DRAG_COPY);
1468
1469 wcva->OnPerformDrop(event);
1470 }
1471
1472 void ContentViewCoreImpl::OnDragExited(
1473 JNIEnv* env,
1474 const base::android::JavaParamRef<jobject>& jobj) {
1475 WebContentsViewAndroid* wcva = static_cast<WebContentsViewAndroid*>(
1476 static_cast<WebContentsImpl*>(web_contents())->GetView());
1477 wcva->OnDragExited();
1478 }
1479
1412 void ContentViewCoreImpl::RequestTextSurroundingSelection( 1480 void ContentViewCoreImpl::RequestTextSurroundingSelection(
1413 int max_length, 1481 int max_length,
1414 const base::Callback< 1482 const base::Callback<
1415 void(const base::string16& content, int start_offset, int end_offset)>& 1483 void(const base::string16& content, int start_offset, int end_offset)>&
1416 callback) { 1484 callback) {
1417 DCHECK(!callback.is_null()); 1485 DCHECK(!callback.is_null());
1418 RenderFrameHost* focused_frame = web_contents_->GetFocusedFrame(); 1486 RenderFrameHost* focused_frame = web_contents_->GetFocusedFrame();
1419 if (!focused_frame) 1487 if (!focused_frame)
1420 return; 1488 return;
1421 if (GetRenderWidgetHostViewAndroid()) { 1489 if (GetRenderWidgetHostViewAndroid()) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 return ScopedJavaLocalRef<jobject>(); 1589 return ScopedJavaLocalRef<jobject>();
1522 1590
1523 return view->GetJavaObject(); 1591 return view->GetJavaObject();
1524 } 1592 }
1525 1593
1526 bool RegisterContentViewCore(JNIEnv* env) { 1594 bool RegisterContentViewCore(JNIEnv* env) {
1527 return RegisterNativesImpl(env); 1595 return RegisterNativesImpl(env);
1528 } 1596 }
1529 1597
1530 } // namespace content 1598 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698