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

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: Make additional data items parameter optional and address other comments. Created 3 years, 7 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 additiona data items with empty data.
Devlin 2017/05/17 16:08:44 typo: additional
jennyz 2017/05/18 23:33:49 Done.
60 if (!params->additional_items.get())
Devlin 2017/05/17 16:08:44 no need for .get()
jennyz 2017/05/18 23:33:49 Done.
61 params->additional_items.reset(new AdditionalDataItemList());
62
63 if (!IsAdditionalItemsParamValid(*(params->additional_items))) {
64 return RespondNow(Error("Unsupported additional_items parameter data."));
Devlin 2017/05/17 16:08:44 additionalItems
jennyz 2017/05/18 23:33:49 Done.
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 if (item.type == clipboard::DATA_ITEM_TYPE_TEXT_PLAIN) {
Devlin 2017/05/17 16:08:44 use a switch statement
jennyz 2017/05/18 23:33:49 Done.
92 if (has_text_plain)
93 return false;
94 has_text_plain = true;
95 }
96 if (item.type == clipboard::DATA_ITEM_TYPE_TEXT_HTML) {
97 if (has_text_html)
98 return false;
99 has_text_html = true;
100 }
101 // Check maximum length of the string data.
102 if (item.data.length() > max_item_data_bytes)
103 return false;
104 }
105 return true;
106 }
107
73 } // namespace extensions 108 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698