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

Side by Side Diff: chrome/browser/extensions/activity_log/dom_actions.cc

Issue 19690003: Extension activity log database refactoring (step 3) (Closed) Base URL: http://git.chromium.org/chromium/src.git@refactor2
Patch Set: Do not set bad BlockedChromeActivityDetail::Reason values Created 7 years, 5 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
(Empty)
1 // Copyright (c) 2013 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 "base/command_line.h"
6 #include "base/json/json_string_value_serializer.h"
7 #include "base/logging.h"
8 #include "base/strings/stringprintf.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/extensions/activity_log/dom_actions.h"
11 #include "chrome/browser/extensions/activity_log/fullstream_ui_policy.h"
12 #include "chrome/browser/history/url_database.h"
13 #include "chrome/common/chrome_switches.h"
14 #include "content/public/browser/browser_thread.h"
15
16 using content::BrowserThread;
17
18 namespace extensions {
19
20 using api::activity_log_private::ExtensionActivity;
21 using api::activity_log_private::DomActivityDetail;
22 using api::activity_log_private::ChromeActivityDetail;
23 using api::activity_log_private::BlockedChromeActivityDetail;
24
25 DOMAction::DOMAction(const std::string& extension_id,
26 const base::Time& time,
27 const DomActionType::Type verb,
28 const GURL& url,
29 const string16& url_title,
30 const std::string& api_call,
31 const std::string& args,
32 const std::string& extra)
33 : Action(extension_id, time, ExtensionActivity::ACTIVITY_TYPE_DOM),
34 verb_(verb),
35 url_(url),
36 url_title_(url_title),
37 api_call_(api_call),
38 args_(args),
39 extra_(extra) { }
40
41 DOMAction::~DOMAction() {
42 }
43
44 scoped_ptr<ExtensionActivity> DOMAction::ConvertToExtensionActivity() {
45 scoped_ptr<ExtensionActivity> formatted_activity;
46 formatted_activity.reset(new ExtensionActivity);
47 formatted_activity->extension_id.reset(
48 new std::string(extension_id()));
49 formatted_activity->activity_type = activity_type();
50 formatted_activity->time.reset(new double(time().ToJsTime()));
51 DomActivityDetail* details = new DomActivityDetail;
52 details->dom_activity_type = DomActivityDetail::ParseDomActivityType(
53 VerbAsString());
54 details->url.reset(new std::string(url_.spec()));
55 details->url_title.reset(new std::string(base::UTF16ToUTF8(url_title_)));
56 details->api_call.reset(new std::string(api_call_));
57 details->args.reset(new std::string(args_));
58 details->extra.reset(new std::string(extra_));
59 formatted_activity->dom_activity_detail.reset(details);
60 return formatted_activity.Pass();
61 }
62
63 bool DOMAction::Record(sql::Connection* db) {
64 std::string sql_str = "INSERT INTO " +
65 std::string(FullStreamUIPolicy::kTableName) +
66 " (extension_id, time, action_type, api_name, args, "
67 "page_url, arg_url, other) VALUES (?,?,?,?,?,?,?,?)";
68 sql::Statement statement(db->GetCachedStatement(
69 sql::StatementID(SQL_FROM_HERE), sql_str.c_str()));
70 statement.BindString(0, extension_id());
71 statement.BindInt64(1, time().ToInternalValue());
72 if (verb_ == DomActionType::INSERTED)
73 statement.BindInt(2, static_cast<int>(Action::ACTION_CONTENT_SCRIPT));
74 else
75 statement.BindInt(2, static_cast<int>(Action::ACTION_DOM_ACCESS));
76 statement.BindString(3, api_call_);
77
78 ListValue args_list;
79 args_list.AppendString(args_);
80 std::string args_as_text;
81 JSONStringValueSerializer serializer(&args_as_text);
82 serializer.SerializeAndOmitBinaryValues(args_list);
83 statement.BindString(4, args_as_text);
84
85 // If running in activity testing mode, store the URL parameters as well.
86 GURL database_url;
87 if ((CommandLine::ForCurrentProcess()->HasSwitch(
88 switches::kEnableExtensionActivityLogTesting))) {
89 database_url = url_;
90 } else {
91 url_canon::Replacements<char> sanitize;
92 sanitize.ClearQuery();
93 sanitize.ClearRef();
94 database_url = url_.ReplaceComponents(sanitize);
95 }
96 statement.BindString(5, database_url.spec());
97
98 if (verb_ == DomActionType::INSERTED)
99 statement.BindString(6, args_);
100 else
101 statement.BindNull(6);
102
103 DictionaryValue other;
104 other.SetString("extra", extra_);
105 other.SetString("page_title", url_title_);
106 other.SetInteger("dom_verb", static_cast<int>(verb_));
107 std::string other_string;
108 JSONStringValueSerializer other_serializer(&other_string);
109 other_serializer.SerializeAndOmitBinaryValues(other);
110 statement.BindString(7, other_string);
111
112 if (!statement.Run()) {
113 LOG(ERROR) << "Activity log database I/O failed: " << sql_str;
114 statement.Clear();
115 return false;
116 }
117 return true;
118 }
119
120 std::string DOMAction::PrintForDebug() {
121 if (verb_ == DomActionType::INSERTED)
122 return "Injected scripts (" + args_ + ") onto "
123 + std::string(url_.spec()) + (extra_.empty() ? extra_ : " " + extra_);
124 else
125 return "DOM API CALL: " + api_call_ + ", ARGS: " + args_ + ", VERB: "
126 + VerbAsString();
127 }
128
129 std::string DOMAction::VerbAsString() const {
130 switch (verb_) {
131 case DomActionType::GETTER:
132 return "getter";
133 case DomActionType::SETTER:
134 return "setter";
135 case DomActionType::METHOD:
136 return "method";
137 case DomActionType::INSERTED:
138 return "inserted";
139 case DomActionType::XHR:
140 return "xhr";
141 case DomActionType::WEBREQUEST:
142 return "webrequest";
143 case DomActionType::MODIFIED: // legacy
144 return "modified";
145 default:
146 NOTREACHED();
147 return NULL;
148 }
149 }
150
151 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/activity_log/dom_actions.h ('k') | chrome/browser/extensions/activity_log/fullstream_ui_policy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698