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

Side by Side Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc

Issue 9820003: Implementation of beginning of Declarative Web Request API backend (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 8 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_action .h"
6
7 #include "base/logging.h"
8 #include "base/stringprintf.h"
9 #include "base/values.h"
10 #include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h"
11
12 namespace extensions {
13
14 namespace {
15 // Constants from the JavaScript API.
16 const char kInstanceType[] = "instanceType";
17 const char kInstanceCancel[] = "experimental.webRequest.CancelRequest";
18
19 // Error messages.
20 const char kExpectedDictionary[] = "Expected a dictionary as action.";
21 const char kInvalidInstanceTypeError[] =
22 "An action has an invalid instanceType: %s";
23 } // namespace
24
25 //
26 // WebRequestAction
27 //
28
29 WebRequestAction::WebRequestAction() {}
30
31 WebRequestAction::~WebRequestAction() {}
32
33 // static
34 scoped_ptr<WebRequestAction> WebRequestAction::Create(
35 const base::Value& json_action,
36 std::string* error) {
37 const base::DictionaryValue* action_dict = NULL;
38 if (!json_action.GetAsDictionary(&action_dict)) {
39 *error = kExpectedDictionary;
40 return scoped_ptr<WebRequestAction>(NULL);
41 }
42
43 std::string instance_type = "No instanceType";
44 if (!action_dict->GetString(kInstanceType, &instance_type)) {
45 *error = base::StringPrintf(kInvalidInstanceTypeError,
46 instance_type.c_str());
47 return scoped_ptr<WebRequestAction>(NULL);
48 }
49
50 if (instance_type == kInstanceCancel) {
51 *error = "";
52 return scoped_ptr<WebRequestAction>(new WebRequestCancelAction);
53 }
54
55 *error = base::StringPrintf(kInvalidInstanceTypeError, instance_type.c_str());
56 return scoped_ptr<WebRequestAction>();
57 }
58
59
60 //
61 // WebRequestActionCollection
62 //
63
64 WebRequestActionCollection::WebRequestActionCollection(const Actions& actions)
65 : actions_(actions) {}
66
67 WebRequestActionCollection::~WebRequestActionCollection() {}
68
69 // static
70 scoped_ptr<WebRequestActionCollection>
71 WebRequestActionCollection::Create(
72 const AnyVector& actions,
73 std::string* error) {
74 Actions result;
75
76 for (AnyVector::const_iterator i = actions.begin();
77 i != actions.end(); ++i) {
78 CHECK(i->get());
79 scoped_ptr<WebRequestAction> action =
80 WebRequestAction::Create((*i)->value(), error);
81 if (!error->empty())
82 return scoped_ptr<WebRequestActionCollection>(NULL);
83 result.push_back(make_linked_ptr(action.release()));
84 }
85
86 return scoped_ptr<WebRequestActionCollection>(
87 new WebRequestActionCollection(result));
88 }
89
90
91 //
92 // WebRequestCancelAction
93 //
94
95 WebRequestCancelAction::WebRequestCancelAction() {}
96
97 WebRequestCancelAction::~WebRequestCancelAction() {}
98
99 int WebRequestCancelAction::GetStages() const {
100 return ON_BEFORE_REQUEST | ON_BEFORE_SEND_HEADERS | ON_HEADERS_RECEIVED |
101 ON_AUTH_REQUIRED;
102 }
103
104 WebRequestAction::Type WebRequestCancelAction::type() const {
105 return WebRequestAction::ACTION_CANCEL_REQUEST;
106 }
107
108 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698