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

Side by Side Diff: extensions/browser/api/clipboard/clipboard_api.cc

Issue 2837983002: Modify SetImageData to add additional items along with image data to save on clipboard. (Closed)
Patch Set: Nits and rebase. Created 3 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) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 "extensions/browser/api/clipboard/clipboard_api.h" 5 #include "extensions/browser/api/clipboard/clipboard_api.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
11 #include "base/strings/string_util.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "extensions/browser/api/extensions_api_client.h" 13 #include "extensions/browser/api/extensions_api_client.h"
13 #include "extensions/browser/event_router.h" 14 #include "extensions/browser/event_router.h"
14 #include "ui/base/clipboard/clipboard_monitor.h" 15 #include "ui/base/clipboard/clipboard_monitor.h"
15 16
16 namespace extensions { 17 namespace extensions {
17 18
18 namespace clipboard = api::clipboard; 19 namespace clipboard = api::clipboard;
19 20
20 static base::LazyInstance< 21 static base::LazyInstance<
(...skipping 26 matching lines...) Expand all
47 router->BroadcastEvent(std::move(event)); 48 router->BroadcastEvent(std::move(event));
48 } 49 }
49 } 50 }
50 51
51 ClipboardSetImageDataFunction::~ClipboardSetImageDataFunction() {} 52 ClipboardSetImageDataFunction::~ClipboardSetImageDataFunction() {}
52 53
53 ExtensionFunction::ResponseAction ClipboardSetImageDataFunction::Run() { 54 ExtensionFunction::ResponseAction ClipboardSetImageDataFunction::Run() {
54 std::unique_ptr<clipboard::SetImageData::Params> params( 55 std::unique_ptr<clipboard::SetImageData::Params> params(
55 clipboard::SetImageData::Params::Create(*args_)); 56 clipboard::SetImageData::Params::Create(*args_));
56 EXTENSION_FUNCTION_VALIDATE(params); 57 EXTENSION_FUNCTION_VALIDATE(params);
58
59 // Fill in the omitted additional data items with empty data.
60 if (!params->additional_items)
61 params->additional_items = base::MakeUnique<AdditionalDataItemList>();
62
63 if (!IsAdditionalItemsParamValid(*params->additional_items)) {
64 return RespondNow(Error("Unsupported additionalItems parameter data."));
65 }
66
57 ExtensionsAPIClient::Get()->SaveImageDataToClipboard( 67 ExtensionsAPIClient::Get()->SaveImageDataToClipboard(
58 params->image_data, params->type, 68 params->image_data, params->type, std::move(*params->additional_items),
59 base::Bind(&ClipboardSetImageDataFunction::OnSaveImageDataSuccess, this), 69 base::Bind(&ClipboardSetImageDataFunction::OnSaveImageDataSuccess, this),
60 base::Bind(&ClipboardSetImageDataFunction::OnSaveImageDataError, this)); 70 base::Bind(&ClipboardSetImageDataFunction::OnSaveImageDataError, this));
61 return RespondLater(); 71 return RespondLater();
62 } 72 }
63 73
64 void ClipboardSetImageDataFunction::OnSaveImageDataSuccess() { 74 void ClipboardSetImageDataFunction::OnSaveImageDataSuccess() {
65 Respond(NoArguments()); 75 Respond(NoArguments());
66 } 76 }
67 77
68 void ClipboardSetImageDataFunction::OnSaveImageDataError( 78 void ClipboardSetImageDataFunction::OnSaveImageDataError(
69 const std::string& error) { 79 const std::string& error) {
70 Respond(Error(error)); 80 Respond(Error(error));
71 } 81 }
72 82
83 bool ClipboardSetImageDataFunction::IsAdditionalItemsParamValid(
84 const AdditionalDataItemList& items) {
85 // Limit the maximum text/html data length to 2MB.
86 const size_t max_item_data_bytes = 2097152;
87
88 bool has_text_plain = false;
89 bool has_text_html = false;
90 for (const clipboard::AdditionalDataItem& item : items) {
91 switch (item.type) {
92 case clipboard::DATA_ITEM_TYPE_TEXTPLAIN:
93 if (has_text_plain)
94 return false;
95 has_text_plain = true;
96 break;
97 case clipboard::DATA_ITEM_TYPE_TEXTHTML:
98 if (has_text_html)
99 return false;
100 has_text_html = true;
101 break;
102 default:
103 NOTREACHED();
104 }
105 // Check maximum length of the string data.
106 if (item.data.length() > max_item_data_bytes)
107 return false;
108 }
109 return true;
110 }
111
73 } // namespace extensions 112 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/clipboard/clipboard_api.h ('k') | extensions/browser/api/extensions_api_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698