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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 1723763002: Add WebDragData to blink::WebView::dragtargetDrop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: always reset ignore_dragged_url_ Created 4 years, 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 419
420 bool HandleMouseLockedInputEvent(const blink::WebMouseEvent& event) override { 420 bool HandleMouseLockedInputEvent(const blink::WebMouseEvent& event) override {
421 // The WebWidget handles mouse lock in WebKit's handleInputEvent(). 421 // The WebWidget handles mouse lock in WebKit's handleInputEvent().
422 return false; 422 return false;
423 } 423 }
424 424
425 private: 425 private:
426 blink::WebWidget* webwidget_; 426 blink::WebWidget* webwidget_;
427 }; 427 };
428 428
429 WebDragData DropMetaDataToWebDragData(
430 const std::vector<DropData::Metadata>& drop_meta_data) {
431 std::vector<WebDragData::Item> item_list;
432 for (const auto& meta_data_item : drop_meta_data) {
433 if (meta_data_item.kind == DropData::Kind::STRING) {
434 WebDragData::Item item;
435 item.storageType = WebDragData::Item::StorageTypeString;
436 item.stringType = meta_data_item.mime_type;
437 item_list.push_back(item);
438 continue;
439 }
440
441 // TODO(hush): crbug.com/584789. Blink needs to support creating a file with
442 // just the mimetype. This is needed to drag files to WebView on Android
443 // platform.
444 if ((meta_data_item.kind == DropData::Kind::FILENAME) &&
445 !meta_data_item.filename.empty()) {
446 WebDragData::Item item;
447 item.storageType = WebDragData::Item::StorageTypeFilename;
448 item.filenameData = meta_data_item.filename.AsUTF16Unsafe();
449 item_list.push_back(item);
450 continue;
451 }
452
453 if (meta_data_item.kind == DropData::Kind::FILESYSTEMFILE) {
454 WebDragData::Item item;
455 item.storageType = WebDragData::Item::StorageTypeFileSystemFile;
456 item.fileSystemURL = meta_data_item.file_system_url;
457 item_list.push_back(item);
458 continue;
459 }
460 }
461
462 WebDragData result;
463 result.initialize();
464 result.setItems(item_list);
465 return result;
466 }
467
429 WebDragData DropDataToWebDragData(const DropData& drop_data) { 468 WebDragData DropDataToWebDragData(const DropData& drop_data) {
430 std::vector<WebDragData::Item> item_list; 469 std::vector<WebDragData::Item> item_list;
431 470
432 // These fields are currently unused when dragging into WebKit. 471 // These fields are currently unused when dragging into WebKit.
433 DCHECK(drop_data.download_metadata.empty()); 472 DCHECK(drop_data.download_metadata.empty());
434 DCHECK(drop_data.file_contents.empty()); 473 DCHECK(drop_data.file_contents.empty());
435 DCHECK(drop_data.file_description_filename.empty()); 474 DCHECK(drop_data.file_description_filename.empty());
436 475
437 if (!drop_data.text.is_null()) { 476 if (!drop_data.text.is_null()) {
438 WebDragData::Item item; 477 WebDragData::Item item;
439 item.storageType = WebDragData::Item::StorageTypeString; 478 item.storageType = WebDragData::Item::StorageTypeString;
440 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeText); 479 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeText);
441 item.stringData = drop_data.text.string(); 480 item.stringData = drop_data.text.string();
442 item_list.push_back(item); 481 item_list.push_back(item);
443 } 482 }
444 483
445 // TODO(dcheng): Do we need to distinguish between null and empty URLs? Is it 484 if (drop_data.has_url) {
446 // meaningful to write an empty URL to the clipboard?
447 if (!drop_data.url.is_empty()) {
448 WebDragData::Item item; 485 WebDragData::Item item;
449 item.storageType = WebDragData::Item::StorageTypeString; 486 item.storageType = WebDragData::Item::StorageTypeString;
450 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeURIList); 487 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeURIList);
451 item.stringData = WebString::fromUTF8(drop_data.url.spec()); 488 item.stringData = WebString::fromUTF8(drop_data.url.spec());
452 item.title = drop_data.url_title; 489 item.title = drop_data.url_title;
453 item_list.push_back(item); 490 item_list.push_back(item);
454 } 491 }
455 492
456 if (!drop_data.html.is_null()) { 493 if (!drop_data.html.is_null()) {
457 WebDragData::Item item; 494 WebDragData::Item item;
(...skipping 1956 matching lines...) Expand 10 before | Expand all | Expand 10 after
2414 2451
2415 enabled_bindings_ |= enabled_bindings_flags; 2452 enabled_bindings_ |= enabled_bindings_flags;
2416 2453
2417 // Keep track of the total bindings accumulated in this process. 2454 // Keep track of the total bindings accumulated in this process.
2418 RenderProcess::current()->AddBindings(enabled_bindings_flags); 2455 RenderProcess::current()->AddBindings(enabled_bindings_flags);
2419 2456
2420 if (main_render_frame_) 2457 if (main_render_frame_)
2421 main_render_frame_->MaybeEnableMojoBindings(); 2458 main_render_frame_->MaybeEnableMojoBindings();
2422 } 2459 }
2423 2460
2424 void RenderViewImpl::OnDragTargetDragEnter(const DropData& drop_data, 2461 void RenderViewImpl::OnDragTargetDragEnter(
2425 const gfx::Point& client_point, 2462 const std::vector<DropData::Metadata>& drop_meta_data,
2426 const gfx::Point& screen_point, 2463 const gfx::Point& client_point,
2427 WebDragOperationsMask ops, 2464 const gfx::Point& screen_point,
2428 int key_modifiers) { 2465 WebDragOperationsMask ops,
2466 int key_modifiers) {
2429 WebDragOperation operation = webview()->dragTargetDragEnter( 2467 WebDragOperation operation = webview()->dragTargetDragEnter(
2430 DropDataToWebDragData(drop_data), 2468 DropMetaDataToWebDragData(drop_meta_data), client_point, screen_point,
2431 ConvertWindowPointToViewport(client_point), 2469 ops, key_modifiers);
2432 screen_point,
2433 ops,
2434 key_modifiers);
2435 2470
2436 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation)); 2471 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation));
2437 } 2472 }
2438 2473
2439 void RenderViewImpl::OnDragTargetDragOver(const gfx::Point& client_point, 2474 void RenderViewImpl::OnDragTargetDragOver(const gfx::Point& client_point,
2440 const gfx::Point& screen_point, 2475 const gfx::Point& screen_point,
2441 WebDragOperationsMask ops, 2476 WebDragOperationsMask ops,
2442 int key_modifiers) { 2477 int key_modifiers) {
2443 WebDragOperation operation = webview()->dragTargetDragOver( 2478 WebDragOperation operation = webview()->dragTargetDragOver(
2444 ConvertWindowPointToViewport(client_point), 2479 ConvertWindowPointToViewport(client_point),
2445 screen_point, 2480 screen_point,
2446 ops, 2481 ops,
2447 key_modifiers); 2482 key_modifiers);
2448 2483
2449 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation)); 2484 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation));
2450 } 2485 }
2451 2486
2452 void RenderViewImpl::OnDragTargetDragLeave() { 2487 void RenderViewImpl::OnDragTargetDragLeave() {
2453 webview()->dragTargetDragLeave(); 2488 webview()->dragTargetDragLeave();
2454 } 2489 }
2455 2490
2456 void RenderViewImpl::OnDragTargetDrop(const gfx::Point& client_point, 2491 void RenderViewImpl::OnDragTargetDrop(const DropData& drop_data,
2492 const gfx::Point& client_point,
2457 const gfx::Point& screen_point, 2493 const gfx::Point& screen_point,
2458 int key_modifiers) { 2494 int key_modifiers) {
2459 webview()->dragTargetDrop( 2495 webview()->dragTargetDrop(DropDataToWebDragData(drop_data), client_point,
2460 ConvertWindowPointToViewport(client_point), screen_point, key_modifiers); 2496 screen_point, key_modifiers);
2461 } 2497 }
2462 2498
2463 void RenderViewImpl::OnDragSourceEnded(const gfx::Point& client_point, 2499 void RenderViewImpl::OnDragSourceEnded(const gfx::Point& client_point,
2464 const gfx::Point& screen_point, 2500 const gfx::Point& screen_point,
2465 WebDragOperation op) { 2501 WebDragOperation op) {
2466 webview()->dragSourceEndedAt( 2502 webview()->dragSourceEndedAt(
2467 ConvertWindowPointToViewport(client_point), screen_point, op); 2503 ConvertWindowPointToViewport(client_point), screen_point, op);
2468 } 2504 }
2469 2505
2470 void RenderViewImpl::OnDragSourceSystemDragEnded() { 2506 void RenderViewImpl::OnDragSourceSystemDragEnded() {
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
3386 return render_frame->focused_pepper_plugin(); 3422 return render_frame->focused_pepper_plugin();
3387 } 3423 }
3388 frame = frame->traverseNext(false); 3424 frame = frame->traverseNext(false);
3389 } 3425 }
3390 3426
3391 return nullptr; 3427 return nullptr;
3392 } 3428 }
3393 #endif 3429 #endif
3394 3430
3395 } // namespace content 3431 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698