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

Side by Side Diff: chrome/browser/extensions/api/declarative_content/content_action.cc

Issue 1871713002: Convert //chrome/browser/extensions from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase and fix header Created 4 years, 8 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 "chrome/browser/extensions/api/declarative_content/content_action.h" 5 #include "chrome/browser/extensions/api/declarative_content/content_action.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h"
11 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
12 #include "base/values.h" 13 #include "base/values.h"
13 #include "chrome/browser/extensions/api/declarative_content/content_constants.h" 14 #include "chrome/browser/extensions/api/declarative_content/content_constants.h"
14 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" 15 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
15 #include "chrome/browser/extensions/extension_action.h" 16 #include "chrome/browser/extensions/extension_action.h"
16 #include "chrome/browser/extensions/extension_action_manager.h" 17 #include "chrome/browser/extensions/extension_action_manager.h"
17 #include "chrome/browser/extensions/extension_tab_util.h" 18 #include "chrome/browser/extensions/extension_tab_util.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/sessions/session_tab_helper.h" 20 #include "chrome/browser/sessions/session_tab_helper.h"
20 #include "content/public/browser/invalidate_type.h" 21 #include "content/public/browser/invalidate_type.h"
(...skipping 26 matching lines...) Expand all
47 // 48 //
48 // The following are concrete actions. 49 // The following are concrete actions.
49 // 50 //
50 51
51 // Action that instructs to show an extension's page action. 52 // Action that instructs to show an extension's page action.
52 class ShowPageAction : public ContentAction { 53 class ShowPageAction : public ContentAction {
53 public: 54 public:
54 ShowPageAction() {} 55 ShowPageAction() {}
55 ~ShowPageAction() override {} 56 ~ShowPageAction() override {}
56 57
57 static scoped_ptr<ContentAction> Create( 58 static std::unique_ptr<ContentAction> Create(
58 content::BrowserContext* browser_context, 59 content::BrowserContext* browser_context,
59 const Extension* extension, 60 const Extension* extension,
60 const base::DictionaryValue* dict, 61 const base::DictionaryValue* dict,
61 std::string* error) { 62 std::string* error) {
62 // We can't show a page action if the extension doesn't have one. 63 // We can't show a page action if the extension doesn't have one.
63 if (ActionInfo::GetPageActionInfo(extension) == NULL) { 64 if (ActionInfo::GetPageActionInfo(extension) == NULL) {
64 *error = kNoPageAction; 65 *error = kNoPageAction;
65 return scoped_ptr<ContentAction>(); 66 return std::unique_ptr<ContentAction>();
66 } 67 }
67 return make_scoped_ptr(new ShowPageAction); 68 return base::WrapUnique(new ShowPageAction);
68 } 69 }
69 70
70 // Implementation of ContentAction: 71 // Implementation of ContentAction:
71 void Apply(const ApplyInfo& apply_info) const override { 72 void Apply(const ApplyInfo& apply_info) const override {
72 ExtensionAction* action = 73 ExtensionAction* action =
73 GetPageAction(apply_info.browser_context, apply_info.extension); 74 GetPageAction(apply_info.browser_context, apply_info.extension);
74 action->DeclarativeShow(ExtensionTabUtil::GetTabId(apply_info.tab)); 75 action->DeclarativeShow(ExtensionTabUtil::GetTabId(apply_info.tab));
75 ExtensionActionAPI::Get(apply_info.browser_context)->NotifyChange( 76 ExtensionActionAPI::Get(apply_info.browser_context)->NotifyChange(
76 action, apply_info.tab, apply_info.browser_context); 77 action, apply_info.tab, apply_info.browser_context);
77 } 78 }
(...skipping 19 matching lines...) Expand all
97 DISALLOW_COPY_AND_ASSIGN(ShowPageAction); 98 DISALLOW_COPY_AND_ASSIGN(ShowPageAction);
98 }; 99 };
99 100
100 // Action that sets an extension's action icon. 101 // Action that sets an extension's action icon.
101 class SetIcon : public ContentAction { 102 class SetIcon : public ContentAction {
102 public: 103 public:
103 SetIcon(const gfx::Image& icon, ActionInfo::Type action_type) 104 SetIcon(const gfx::Image& icon, ActionInfo::Type action_type)
104 : icon_(icon), action_type_(action_type) {} 105 : icon_(icon), action_type_(action_type) {}
105 ~SetIcon() override {} 106 ~SetIcon() override {}
106 107
107 static scoped_ptr<ContentAction> Create( 108 static std::unique_ptr<ContentAction> Create(
108 content::BrowserContext* browser_context, 109 content::BrowserContext* browser_context,
109 const Extension* extension, 110 const Extension* extension,
110 const base::DictionaryValue* dict, 111 const base::DictionaryValue* dict,
111 std::string* error); 112 std::string* error);
112 113
113 // Implementation of ContentAction: 114 // Implementation of ContentAction:
114 void Apply(const ApplyInfo& apply_info) const override { 115 void Apply(const ApplyInfo& apply_info) const override {
115 Profile* profile = Profile::FromBrowserContext(apply_info.browser_context); 116 Profile* profile = Profile::FromBrowserContext(apply_info.browser_context);
116 ExtensionAction* action = GetExtensionAction(profile, 117 ExtensionAction* action = GetExtensionAction(profile,
117 apply_info.extension); 118 apply_info.extension);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 } 176 }
176 } 177 }
177 178
178 return true; 179 return true;
179 } 180 }
180 181
181 struct ContentActionFactory { 182 struct ContentActionFactory {
182 // Factory methods for ContentAction instances. |extension| is the extension 183 // Factory methods for ContentAction instances. |extension| is the extension
183 // for which the action is being created. |dict| contains the json dictionary 184 // for which the action is being created. |dict| contains the json dictionary
184 // that describes the action. |error| is used to return error messages. 185 // that describes the action. |error| is used to return error messages.
185 using FactoryMethod = scoped_ptr<ContentAction>(*)( 186 using FactoryMethod = std::unique_ptr<ContentAction> (*)(
186 content::BrowserContext* /* browser_context */, 187 content::BrowserContext* /* browser_context */,
187 const Extension* /* extension */, 188 const Extension* /* extension */,
188 const base::DictionaryValue* /* dict */, 189 const base::DictionaryValue* /* dict */,
189 std::string* /* error */); 190 std::string* /* error */);
190 // Maps the name of a declarativeContent action type to the factory 191 // Maps the name of a declarativeContent action type to the factory
191 // function creating it. 192 // function creating it.
192 std::map<std::string, FactoryMethod> factory_methods; 193 std::map<std::string, FactoryMethod> factory_methods;
193 194
194 ContentActionFactory() { 195 ContentActionFactory() {
195 factory_methods[keys::kShowPageAction] = 196 factory_methods[keys::kShowPageAction] =
(...skipping 23 matching lines...) Expand all
219 bool all_frames; 220 bool all_frames;
220 bool match_about_blank; 221 bool match_about_blank;
221 }; 222 };
222 223
223 RequestContentScript::ScriptData::ScriptData() 224 RequestContentScript::ScriptData::ScriptData()
224 : all_frames(false), 225 : all_frames(false),
225 match_about_blank(false) {} 226 match_about_blank(false) {}
226 RequestContentScript::ScriptData::~ScriptData() {} 227 RequestContentScript::ScriptData::~ScriptData() {}
227 228
228 // static 229 // static
229 scoped_ptr<ContentAction> RequestContentScript::Create( 230 std::unique_ptr<ContentAction> RequestContentScript::Create(
230 content::BrowserContext* browser_context, 231 content::BrowserContext* browser_context,
231 const Extension* extension, 232 const Extension* extension,
232 const base::DictionaryValue* dict, 233 const base::DictionaryValue* dict,
233 std::string* error) { 234 std::string* error) {
234 ScriptData script_data; 235 ScriptData script_data;
235 if (!InitScriptData(dict, error, &script_data)) 236 if (!InitScriptData(dict, error, &script_data))
236 return scoped_ptr<ContentAction>(); 237 return std::unique_ptr<ContentAction>();
237 238
238 return make_scoped_ptr(new RequestContentScript(browser_context, extension, 239 return base::WrapUnique(
239 script_data)); 240 new RequestContentScript(browser_context, extension, script_data));
240 } 241 }
241 242
242 // static 243 // static
243 scoped_ptr<ContentAction> RequestContentScript::CreateForTest( 244 std::unique_ptr<ContentAction> RequestContentScript::CreateForTest(
244 DeclarativeUserScriptMaster* master, 245 DeclarativeUserScriptMaster* master,
245 const Extension* extension, 246 const Extension* extension,
246 const base::Value& json_action, 247 const base::Value& json_action,
247 std::string* error) { 248 std::string* error) {
248 // Simulate ContentAction-level initialization. Check that instance type is 249 // Simulate ContentAction-level initialization. Check that instance type is
249 // RequestContentScript. 250 // RequestContentScript.
250 error->clear(); 251 error->clear();
251 const base::DictionaryValue* action_dict = NULL; 252 const base::DictionaryValue* action_dict = NULL;
252 std::string instance_type; 253 std::string instance_type;
253 if (!(json_action.GetAsDictionary(&action_dict) && 254 if (!(json_action.GetAsDictionary(&action_dict) &&
254 action_dict->GetString(keys::kInstanceType, &instance_type) && 255 action_dict->GetString(keys::kInstanceType, &instance_type) &&
255 instance_type == std::string(keys::kRequestContentScript))) 256 instance_type == std::string(keys::kRequestContentScript)))
256 return scoped_ptr<ContentAction>(); 257 return std::unique_ptr<ContentAction>();
257 258
258 // Normal RequestContentScript data initialization. 259 // Normal RequestContentScript data initialization.
259 ScriptData script_data; 260 ScriptData script_data;
260 if (!InitScriptData(action_dict, error, &script_data)) 261 if (!InitScriptData(action_dict, error, &script_data))
261 return scoped_ptr<ContentAction>(); 262 return std::unique_ptr<ContentAction>();
262 263
263 // Inject provided DeclarativeUserScriptMaster, rather than looking it up 264 // Inject provided DeclarativeUserScriptMaster, rather than looking it up
264 // using a BrowserContext. 265 // using a BrowserContext.
265 return make_scoped_ptr(new RequestContentScript(master, extension, 266 return base::WrapUnique(
266 script_data)); 267 new RequestContentScript(master, extension, script_data));
267 } 268 }
268 269
269 // static 270 // static
270 bool RequestContentScript::InitScriptData(const base::DictionaryValue* dict, 271 bool RequestContentScript::InitScriptData(const base::DictionaryValue* dict,
271 std::string* error, 272 std::string* error,
272 ScriptData* script_data) { 273 ScriptData* script_data) {
273 const base::ListValue* list_value = NULL; 274 const base::ListValue* list_value = NULL;
274 275
275 if (!dict->HasKey(keys::kCss) && !dict->HasKey(keys::kJs)) { 276 if (!dict->HasKey(keys::kCss) && !dict->HasKey(keys::kJs)) {
276 *error = base::StringPrintf(kMissingParameter, "css or js"); 277 *error = base::StringPrintf(kMissingParameter, "css or js");
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 content::RenderFrameHost* render_frame_host = contents->GetMainFrame(); 375 content::RenderFrameHost* render_frame_host = contents->GetMainFrame();
375 render_frame_host->Send(new ExtensionMsg_ExecuteDeclarativeScript( 376 render_frame_host->Send(new ExtensionMsg_ExecuteDeclarativeScript(
376 render_frame_host->GetRoutingID(), 377 render_frame_host->GetRoutingID(),
377 SessionTabHelper::IdForTab(contents), 378 SessionTabHelper::IdForTab(contents),
378 extension->id(), 379 extension->id(),
379 script_.id(), 380 script_.id(),
380 contents->GetLastCommittedURL())); 381 contents->GetLastCommittedURL()));
381 } 382 }
382 383
383 // static 384 // static
384 scoped_ptr<ContentAction> SetIcon::Create( 385 std::unique_ptr<ContentAction> SetIcon::Create(
385 content::BrowserContext* browser_context, 386 content::BrowserContext* browser_context,
386 const Extension* extension, 387 const Extension* extension,
387 const base::DictionaryValue* dict, 388 const base::DictionaryValue* dict,
388 std::string* error) { 389 std::string* error) {
389 // We can't set a page or action's icon if the extension doesn't have one. 390 // We can't set a page or action's icon if the extension doesn't have one.
390 ActionInfo::Type type; 391 ActionInfo::Type type;
391 if (ActionInfo::GetPageActionInfo(extension) != NULL) { 392 if (ActionInfo::GetPageActionInfo(extension) != NULL) {
392 type = ActionInfo::TYPE_PAGE; 393 type = ActionInfo::TYPE_PAGE;
393 } else if (ActionInfo::GetBrowserActionInfo(extension) != NULL) { 394 } else if (ActionInfo::GetBrowserActionInfo(extension) != NULL) {
394 type = ActionInfo::TYPE_BROWSER; 395 type = ActionInfo::TYPE_BROWSER;
395 } else { 396 } else {
396 *error = kNoPageOrBrowserAction; 397 *error = kNoPageOrBrowserAction;
397 return scoped_ptr<ContentAction>(); 398 return std::unique_ptr<ContentAction>();
398 } 399 }
399 400
400 gfx::ImageSkia icon; 401 gfx::ImageSkia icon;
401 const base::DictionaryValue* canvas_set = NULL; 402 const base::DictionaryValue* canvas_set = NULL;
402 if (dict->GetDictionary("imageData", &canvas_set) && 403 if (dict->GetDictionary("imageData", &canvas_set) &&
403 !ExtensionAction::ParseIconFromCanvasDictionary(*canvas_set, &icon)) { 404 !ExtensionAction::ParseIconFromCanvasDictionary(*canvas_set, &icon)) {
404 *error = kInvalidIconDictionary; 405 *error = kInvalidIconDictionary;
405 return scoped_ptr<ContentAction>(); 406 return std::unique_ptr<ContentAction>();
406 } 407 }
407 return make_scoped_ptr(new SetIcon(gfx::Image(icon), type)); 408 return base::WrapUnique(new SetIcon(gfx::Image(icon), type));
408 } 409 }
409 410
410 // 411 //
411 // ContentAction 412 // ContentAction
412 // 413 //
413 414
414 ContentAction::~ContentAction() {} 415 ContentAction::~ContentAction() {}
415 416
416 // static 417 // static
417 scoped_ptr<ContentAction> ContentAction::Create( 418 std::unique_ptr<ContentAction> ContentAction::Create(
418 content::BrowserContext* browser_context, 419 content::BrowserContext* browser_context,
419 const Extension* extension, 420 const Extension* extension,
420 const base::Value& json_action, 421 const base::Value& json_action,
421 std::string* error) { 422 std::string* error) {
422 error->clear(); 423 error->clear();
423 const base::DictionaryValue* action_dict = NULL; 424 const base::DictionaryValue* action_dict = NULL;
424 std::string instance_type; 425 std::string instance_type;
425 if (!(json_action.GetAsDictionary(&action_dict) && 426 if (!(json_action.GetAsDictionary(&action_dict) &&
426 action_dict->GetString(keys::kInstanceType, &instance_type))) 427 action_dict->GetString(keys::kInstanceType, &instance_type)))
427 return scoped_ptr<ContentAction>(); 428 return std::unique_ptr<ContentAction>();
428 429
429 ContentActionFactory& factory = g_content_action_factory.Get(); 430 ContentActionFactory& factory = g_content_action_factory.Get();
430 std::map<std::string, ContentActionFactory::FactoryMethod>::iterator 431 std::map<std::string, ContentActionFactory::FactoryMethod>::iterator
431 factory_method_iter = factory.factory_methods.find(instance_type); 432 factory_method_iter = factory.factory_methods.find(instance_type);
432 if (factory_method_iter != factory.factory_methods.end()) 433 if (factory_method_iter != factory.factory_methods.end())
433 return (*factory_method_iter->second)( 434 return (*factory_method_iter->second)(
434 browser_context, extension, action_dict, error); 435 browser_context, extension, action_dict, error);
435 436
436 *error = base::StringPrintf(kInvalidInstanceTypeError, instance_type.c_str()); 437 *error = base::StringPrintf(kInvalidInstanceTypeError, instance_type.c_str());
437 return scoped_ptr<ContentAction>(); 438 return std::unique_ptr<ContentAction>();
438 } 439 }
439 440
440 ContentAction::ContentAction() {} 441 ContentAction::ContentAction() {}
441 442
442 } // namespace extensions 443 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698