Chromium Code Reviews| Index: chrome/renderer/extensions/dom_activity_logger.cc |
| diff --git a/chrome/renderer/extensions/dom_activity_logger.cc b/chrome/renderer/extensions/dom_activity_logger.cc |
| index 97cab717491f3b995fb27b8f363480152e97c56d..57bcfeed0c1d9107250aa3163845ad38e991ac0c 100644 |
| --- a/chrome/renderer/extensions/dom_activity_logger.cc |
| +++ b/chrome/renderer/extensions/dom_activity_logger.cc |
| @@ -5,7 +5,6 @@ |
| #include "chrome/renderer/extensions/dom_activity_logger.h" |
| #include "chrome/common/extensions/ad_injection_constants.h" |
| -#include "chrome/common/extensions/dom_action_types.h" |
| #include "chrome/renderer/chrome_render_process_observer.h" |
| #include "chrome/renderer/extensions/activity_log_converter_strategy.h" |
| #include "content/public/renderer/render_thread.h" |
| @@ -22,6 +21,22 @@ using blink::WebURL; |
| namespace extensions { |
| +namespace { |
| + |
| +scoped_ptr<base::Value> ConvertV8Value(const std::string& api_name, |
| + const v8::Handle<v8::Value> v8_value) { |
| + scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
| + ActivityLogConverterStrategy strategy; |
| + strategy.set_enable_detailed_parsing( |
| + ad_injection_constants::ApiCanInjectAds(api_name)); |
| + converter->SetFunctionAllowed(true); |
| + converter->SetStrategy(&strategy); |
| + return scoped_ptr<base::Value>(converter->FromV8Value( |
| + v8_value, v8::Isolate::GetCurrent()->GetCurrentContext())); |
| +} |
| + |
| +} // namespace |
| + |
| DOMActivityLogger::DOMActivityLogger(const std::string& extension_id) |
| : extension_id_(extension_id) { |
| } |
| @@ -35,35 +50,19 @@ void DOMActivityLogger::log( |
| const WebString& call_type, |
| const WebURL& url, |
| const WebString& title) { |
| - scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
| - ActivityLogConverterStrategy strategy; |
| - strategy.set_enable_detailed_parsing( |
| - ad_injection_constants::ApiCanInjectAds(api_name.utf8().c_str())); |
| - converter->SetFunctionAllowed(true); |
| - converter->SetStrategy(&strategy); |
| - scoped_ptr<base::ListValue> argv_list_value(new base::ListValue()); |
| - for (int i = 0; i < argc; i++) { |
| - argv_list_value->Set( |
| - i, |
| - converter->FromV8Value(argv[i], |
| - v8::Isolate::GetCurrent()->GetCurrentContext())); |
| - } |
| - |
| - ExtensionHostMsg_DOMAction_Params params; |
| - params.url = url; |
| - params.url_title = title; |
| - params.api_call = api_name.utf8(); |
| - params.arguments.Swap(argv_list_value.get()); |
| - const std::string type = call_type.utf8(); |
| - if (type == "Getter") |
| - params.call_type = DomActionType::GETTER; |
| - else if (type == "Setter") |
| - params.call_type = DomActionType::SETTER; |
| - else |
| - params.call_type = DomActionType::METHOD; |
| + scoped_ptr<base::ListValue> args(new base::ListValue()); |
| + std::string api_name_utf8 = api_name.utf8(); |
| + for (int i = 0; i < argc; ++i) |
| + args->Append(ConvertV8Value(api_name_utf8, argv[i]).release()); |
| - content::RenderThread::Get()->Send( |
| - new ExtensionHostMsg_AddDOMActionToActivityLog(extension_id_, params)); |
| + DomActionType::Type type = DomActionType::METHOD; |
| + if (call_type == "Getter") |
| + type = DomActionType::GETTER; |
| + else if (call_type == "Setter") |
| + type = DomActionType::SETTER; |
| + // else DomActionType::METHOD is correct. |
| + SendDomActionMessage( |
| + api_name_utf8, url, title, type, args.Pass()); |
| } |
| void DOMActivityLogger::AttachToWorld(int world_id, |
| @@ -78,4 +77,63 @@ void DOMActivityLogger::AttachToWorld(int world_id, |
| #endif |
| } |
| +void DOMActivityLogger::logGetter(const WebString& api_name, |
| + const WebURL& url, |
| + const WebString& title) { |
| + SendDomActionMessage(api_name.utf8(), |
| + url, |
| + title, |
| + DomActionType::GETTER, |
| + scoped_ptr<base::ListValue>(new base::ListValue())); |
| +} |
| + |
| +void DOMActivityLogger::logSetter(const WebString& api_name, |
| + const v8::Handle<v8::Value>& new_value, |
| + const WebURL& url, |
| + const WebString& title) { |
| + logSetter(api_name, new_value, v8::Handle<v8::Value>(), url, title); |
|
not at google - send to devlin
2014/04/24 20:38:51
not convinced this method is really useful, caller
|
| +} |
| + |
| +void DOMActivityLogger::logSetter(const WebString& api_name, |
| + const v8::Handle<v8::Value>& new_value, |
| + const v8::Handle<v8::Value>& old_value, |
| + const WebURL& url, |
| + const WebString& title) { |
| + scoped_ptr<base::ListValue> args(new base::ListValue); |
| + std::string api_name_utf8 = api_name.utf8(); |
| + args->Append(ConvertV8Value(api_name_utf8, new_value).release()); |
| + if (!old_value.IsEmpty()) |
| + args->Append(ConvertV8Value(api_name_utf8, old_value).release()); |
| + SendDomActionMessage( |
| + api_name_utf8, url, title, DomActionType::SETTER, args.Pass()); |
| +} |
| + |
| +void DOMActivityLogger::logMethod(const WebString& api_name, |
| + int argc, |
| + const v8::Handle<v8::Value>* argv, |
| + const WebURL& url, |
| + const WebString& title) { |
| + scoped_ptr<base::ListValue> args(new base::ListValue); |
| + std::string api_name_utf8 = api_name.utf8(); |
| + for (int i = 0; i < argc; ++i) |
| + args->Append(ConvertV8Value(api_name_utf8, argv[i]).release()); |
| + SendDomActionMessage( |
| + api_name_utf8, url, title, DomActionType::METHOD, args.Pass()); |
| +} |
| + |
| +void DOMActivityLogger::SendDomActionMessage(const std::string& api_call, |
| + const GURL& url, |
| + const base::string16& url_title, |
| + DomActionType::Type call_type, |
| + scoped_ptr<base::ListValue> args) { |
| + ExtensionHostMsg_DOMAction_Params params; |
| + params.api_call = api_call; |
| + params.url = url; |
| + params.url_title = url_title; |
| + params.call_type = call_type; |
| + params.arguments.Swap(args.get()); |
| + content::RenderThread::Get()->Send( |
| + new ExtensionHostMsg_AddDOMActionToActivityLog(extension_id_, params)); |
| +} |
| + |
| } // namespace extensions |