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

Side by Side Diff: extensions/renderer/declarative_event.cc

Issue 2912883004: [Extensions Bindings] Don't allow `event` module with native bindings (Closed)
Patch Set: lazyboy's 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/renderer/declarative_event.h" 5 #include "extensions/renderer/declarative_event.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 107
108 } // namespace 108 } // namespace
109 109
110 gin::WrapperInfo DeclarativeEvent::kWrapperInfo = {gin::kEmbedderNativeGin}; 110 gin::WrapperInfo DeclarativeEvent::kWrapperInfo = {gin::kEmbedderNativeGin};
111 111
112 DeclarativeEvent::DeclarativeEvent( 112 DeclarativeEvent::DeclarativeEvent(
113 const std::string& name, 113 const std::string& name,
114 APITypeReferenceMap* type_refs, 114 APITypeReferenceMap* type_refs,
115 APIRequestHandler* request_handler, 115 APIRequestHandler* request_handler,
116 const std::vector<std::string>& actions_list, 116 const std::vector<std::string>& actions_list,
117 const std::vector<std::string>& conditions_list) 117 const std::vector<std::string>& conditions_list,
118 int webview_instance_id)
118 : event_name_(name), 119 : event_name_(name),
119 type_refs_(type_refs), 120 type_refs_(type_refs),
120 request_handler_(request_handler) { 121 request_handler_(request_handler),
122 webview_instance_id_(webview_instance_id) {
121 // In declarative events, the specification of the rules can change. This only 123 // In declarative events, the specification of the rules can change. This only
122 // matters for the events.addRules function. Check whether or not a 124 // matters for the events.addRules function. Check whether or not a
123 // specialized version for this event exists, and, if not, create it. 125 // specialized version for this event exists, and, if not, create it.
124 std::string add_rules_name = name + ".addRules"; 126 std::string add_rules_name = name + ".addRules";
125 if (!type_refs->HasTypeMethodSignature(add_rules_name)) { 127 if (!type_refs->HasTypeMethodSignature(add_rules_name)) {
126 // Create the specific rules spec and cache it under this type. This will 128 // Create the specific rules spec and cache it under this type. This will
127 // result in e.g. declarativeContent.onPageChanged.Rule, since the Rule 129 // result in e.g. declarativeContent.onPageChanged.Rule, since the Rule
128 // schema is only used for this event. 130 // schema is only used for this event.
129 std::unique_ptr<ArgumentSpec> rules_spec = 131 std::unique_ptr<ArgumentSpec> rules_spec =
130 BuildRulesSpec(actions_list, conditions_list); 132 BuildRulesSpec(actions_list, conditions_list);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 gin::Arguments* arguments) { 174 gin::Arguments* arguments) {
173 v8::Isolate* isolate = arguments->isolate(); 175 v8::Isolate* isolate = arguments->isolate();
174 v8::HandleScope handle_scope(isolate); 176 v8::HandleScope handle_scope(isolate);
175 v8::Local<v8::Context> context = arguments->GetHolderCreationContext(); 177 v8::Local<v8::Context> context = arguments->GetHolderCreationContext();
176 178
177 std::vector<v8::Local<v8::Value>> argument_list = arguments->GetAll(); 179 std::vector<v8::Local<v8::Value>> argument_list = arguments->GetAll();
178 180
179 // The events API has two undocumented parameters for each function: the name 181 // The events API has two undocumented parameters for each function: the name
180 // of the event, and the "webViewInstanceId". Currently, stub 0 for webview 182 // of the event, and the "webViewInstanceId". Currently, stub 0 for webview
181 // instance id. 183 // instance id.
182 // TODO(devlin): We'll need to fix that to get it to work with webviews.
183 // Longer term, it would be *great* to just factor that out entirely (can we
184 // not get that information on the browser side? Investigate).
185 argument_list.insert(argument_list.begin(), 184 argument_list.insert(argument_list.begin(),
186 {gin::StringToSymbol(isolate, event_name_), 185 {gin::StringToSymbol(isolate, event_name_),
187 v8::Integer::New(isolate, 0)}); 186 v8::Integer::New(isolate, webview_instance_id_)});
188 187
189 std::unique_ptr<base::ListValue> converted_arguments; 188 std::unique_ptr<base::ListValue> converted_arguments;
190 v8::Local<v8::Function> callback; 189 v8::Local<v8::Function> callback;
191 std::string error; 190 std::string error;
192 const APISignature* signature = 191 const APISignature* signature =
193 type_refs_->GetTypeMethodSignature(signature_name); 192 type_refs_->GetTypeMethodSignature(signature_name);
194 DCHECK(signature); 193 DCHECK(signature);
195 if (!signature->ParseArgumentsToJSON(context, argument_list, *type_refs_, 194 if (!signature->ParseArgumentsToJSON(context, argument_list, *type_refs_,
196 &converted_arguments, &callback, 195 &converted_arguments, &callback,
197 &error)) { 196 &error)) {
198 arguments->ThrowTypeError("Invalid invocation"); 197 arguments->ThrowTypeError("Invalid invocation");
199 return; 198 return;
200 } 199 }
201 200
202 request_handler_->StartRequest( 201 request_handler_->StartRequest(
203 context, request_name, std::move(converted_arguments), callback, 202 context, request_name, std::move(converted_arguments), callback,
204 v8::Local<v8::Function>(), binding::RequestThread::UI); 203 v8::Local<v8::Function>(), binding::RequestThread::UI);
205 } 204 }
206 205
207 } // namespace extensions 206 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/renderer/declarative_event.h ('k') | extensions/renderer/declarative_event_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698