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

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: rebase 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 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 DCHECK(sizes->empty()); 385 DCHECK(sizes->empty());
386 sizes->reserve(web_sizes.size()); 386 sizes->reserve(web_sizes.size());
387 for (size_t i = 0; i < web_sizes.size(); ++i) 387 for (size_t i = 0; i < web_sizes.size(); ++i)
388 sizes->push_back(gfx::Size(web_sizes[i])); 388 sizes->push_back(gfx::Size(web_sizes[i]));
389 } 389 }
390 390
391 /////////////////////////////////////////////////////////////////////////////// 391 ///////////////////////////////////////////////////////////////////////////////
392 392
393 namespace { 393 namespace {
394 394
395 WebDragData DropMetaDataToWebDragData(
396 const std::vector<DropData::Metadata>& drop_meta_data) {
397 std::vector<WebDragData::Item> item_list;
398 for (const auto& meta_data_item : drop_meta_data) {
399 if (meta_data_item.kind == DropData::Kind::STRING) {
400 WebDragData::Item item;
401 item.storageType = WebDragData::Item::StorageTypeString;
402 item.stringType = meta_data_item.mime_type;
403 item_list.push_back(item);
404 continue;
405 }
406
407 // TODO(hush): crbug.com/584789. Blink needs to support creating a file with
408 // just the mimetype. This is needed to drag files to WebView on Android
409 // platform.
410 if ((meta_data_item.kind == DropData::Kind::FILENAME) &&
411 !meta_data_item.filename.empty()) {
412 WebDragData::Item item;
413 item.storageType = WebDragData::Item::StorageTypeFilename;
414 item.filenameData = meta_data_item.filename.AsUTF16Unsafe();
415 item_list.push_back(item);
416 continue;
417 }
418
419 if (meta_data_item.kind == DropData::Kind::FILESYSTEMFILE) {
420 WebDragData::Item item;
421 item.storageType = WebDragData::Item::StorageTypeFileSystemFile;
422 item.fileSystemURL = meta_data_item.file_system_url;
423 item_list.push_back(item);
424 continue;
425 }
426 }
427
428 WebDragData result;
429 result.initialize();
430 result.setItems(item_list);
431 return result;
432 }
433
395 WebDragData DropDataToWebDragData(const DropData& drop_data) { 434 WebDragData DropDataToWebDragData(const DropData& drop_data) {
396 std::vector<WebDragData::Item> item_list; 435 std::vector<WebDragData::Item> item_list;
397 436
398 // These fields are currently unused when dragging into WebKit. 437 // These fields are currently unused when dragging into WebKit.
399 DCHECK(drop_data.download_metadata.empty()); 438 DCHECK(drop_data.download_metadata.empty());
400 DCHECK(drop_data.file_contents.empty()); 439 DCHECK(drop_data.file_contents.empty());
401 DCHECK(drop_data.file_description_filename.empty()); 440 DCHECK(drop_data.file_description_filename.empty());
402 441
403 if (!drop_data.text.is_null()) { 442 if (!drop_data.text.is_null()) {
404 WebDragData::Item item; 443 WebDragData::Item item;
405 item.storageType = WebDragData::Item::StorageTypeString; 444 item.storageType = WebDragData::Item::StorageTypeString;
406 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeText); 445 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeText);
407 item.stringData = drop_data.text.string(); 446 item.stringData = drop_data.text.string();
408 item_list.push_back(item); 447 item_list.push_back(item);
409 } 448 }
410 449
411 // TODO(dcheng): Do we need to distinguish between null and empty URLs? Is it
412 // meaningful to write an empty URL to the clipboard?
413 if (!drop_data.url.is_empty()) { 450 if (!drop_data.url.is_empty()) {
414 WebDragData::Item item; 451 WebDragData::Item item;
415 item.storageType = WebDragData::Item::StorageTypeString; 452 item.storageType = WebDragData::Item::StorageTypeString;
416 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeURIList); 453 item.stringType = WebString::fromUTF8(ui::Clipboard::kMimeTypeURIList);
417 item.stringData = WebString::fromUTF8(drop_data.url.spec()); 454 item.stringData = WebString::fromUTF8(drop_data.url.spec());
418 item.title = drop_data.url_title; 455 item.title = drop_data.url_title;
419 item_list.push_back(item); 456 item_list.push_back(item);
420 } 457 }
421 458
422 if (!drop_data.html.is_null()) { 459 if (!drop_data.html.is_null()) {
(...skipping 1901 matching lines...) Expand 10 before | Expand all | Expand 10 after
2324 2361
2325 enabled_bindings_ |= enabled_bindings_flags; 2362 enabled_bindings_ |= enabled_bindings_flags;
2326 2363
2327 // Keep track of the total bindings accumulated in this process. 2364 // Keep track of the total bindings accumulated in this process.
2328 RenderProcess::current()->AddBindings(enabled_bindings_flags); 2365 RenderProcess::current()->AddBindings(enabled_bindings_flags);
2329 2366
2330 if (main_render_frame_) 2367 if (main_render_frame_)
2331 main_render_frame_->MaybeEnableMojoBindings(); 2368 main_render_frame_->MaybeEnableMojoBindings();
2332 } 2369 }
2333 2370
2334 void RenderViewImpl::OnDragTargetDragEnter(const DropData& drop_data, 2371 void RenderViewImpl::OnDragTargetDragEnter(
2335 const gfx::Point& client_point, 2372 const std::vector<DropData::Metadata>& drop_meta_data,
2336 const gfx::Point& screen_point, 2373 const gfx::Point& client_point,
2337 WebDragOperationsMask ops, 2374 const gfx::Point& screen_point,
2338 int key_modifiers) { 2375 WebDragOperationsMask ops,
2376 int key_modifiers) {
2339 WebDragOperation operation = webview()->dragTargetDragEnter( 2377 WebDragOperation operation = webview()->dragTargetDragEnter(
2340 DropDataToWebDragData(drop_data), 2378 DropMetaDataToWebDragData(drop_meta_data), client_point, screen_point,
2341 ConvertWindowPointToViewport(client_point), 2379 ops, key_modifiers);
2342 screen_point,
2343 ops,
2344 key_modifiers);
2345 2380
2346 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation)); 2381 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation));
2347 } 2382 }
2348 2383
2349 void RenderViewImpl::OnDragTargetDragOver(const gfx::Point& client_point, 2384 void RenderViewImpl::OnDragTargetDragOver(const gfx::Point& client_point,
2350 const gfx::Point& screen_point, 2385 const gfx::Point& screen_point,
2351 WebDragOperationsMask ops, 2386 WebDragOperationsMask ops,
2352 int key_modifiers) { 2387 int key_modifiers) {
2353 WebDragOperation operation = webview()->dragTargetDragOver( 2388 WebDragOperation operation = webview()->dragTargetDragOver(
2354 ConvertWindowPointToViewport(client_point), 2389 ConvertWindowPointToViewport(client_point),
2355 screen_point, 2390 screen_point,
2356 ops, 2391 ops,
2357 key_modifiers); 2392 key_modifiers);
2358 2393
2359 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation)); 2394 Send(new DragHostMsg_UpdateDragCursor(GetRoutingID(), operation));
2360 } 2395 }
2361 2396
2362 void RenderViewImpl::OnDragTargetDragLeave() { 2397 void RenderViewImpl::OnDragTargetDragLeave() {
2363 webview()->dragTargetDragLeave(); 2398 webview()->dragTargetDragLeave();
2364 } 2399 }
2365 2400
2366 void RenderViewImpl::OnDragTargetDrop(const gfx::Point& client_point, 2401 void RenderViewImpl::OnDragTargetDrop(const DropData& drop_data,
2402 const gfx::Point& client_point,
2367 const gfx::Point& screen_point, 2403 const gfx::Point& screen_point,
2368 int key_modifiers) { 2404 int key_modifiers) {
2369 webview()->dragTargetDrop( 2405 webview()->dragTargetDrop(DropDataToWebDragData(drop_data), client_point,
2370 ConvertWindowPointToViewport(client_point), screen_point, key_modifiers); 2406 screen_point, key_modifiers);
2371 } 2407 }
2372 2408
2373 void RenderViewImpl::OnDragSourceEnded(const gfx::Point& client_point, 2409 void RenderViewImpl::OnDragSourceEnded(const gfx::Point& client_point,
2374 const gfx::Point& screen_point, 2410 const gfx::Point& screen_point,
2375 WebDragOperation op) { 2411 WebDragOperation op) {
2376 webview()->dragSourceEndedAt( 2412 webview()->dragSourceEndedAt(
2377 ConvertWindowPointToViewport(client_point), screen_point, op); 2413 ConvertWindowPointToViewport(client_point), screen_point, op);
2378 } 2414 }
2379 2415
2380 void RenderViewImpl::OnDragSourceSystemDragEnded() { 2416 void RenderViewImpl::OnDragSourceSystemDragEnded() {
(...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after
3236 return render_frame->focused_pepper_plugin(); 3272 return render_frame->focused_pepper_plugin();
3237 } 3273 }
3238 frame = frame->traverseNext(false); 3274 frame = frame->traverseNext(false);
3239 } 3275 }
3240 3276
3241 return nullptr; 3277 return nullptr;
3242 } 3278 }
3243 #endif 3279 #endif
3244 3280
3245 } // namespace content 3281 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698