Commit b55394a8 authored by pmarch@chromium.org's avatar pmarch@chromium.org

Enables Activity Log to extract URLs from URL assignment

DOM API calls and place them into argUrl field of an
Activity Log entry.

BUG=339882

Review URL: https://codereview.chromium.org/160753002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251348 0039d316-1c4b-4281-b951-d872f2087c98
parent 1c0f72e0
...@@ -92,46 +92,64 @@ struct ApiInfo { ...@@ -92,46 +92,64 @@ struct ApiInfo {
}; };
static const ApiInfo kApiInfoTable[] = { static const ApiInfo kApiInfoTable[] = {
// Tabs APIs that require tab ID translation // Tabs APIs that require tab ID translation
{Action::ACTION_API_CALL, "tabs.connect", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.connect", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.detectLanguage", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.detectLanguage", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.duplicate", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.duplicate", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.executeScript", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.executeScript", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.get", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.get", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.insertCSS", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.insertCSS", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.move", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.move", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.reload", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.reload", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.remove", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.remove", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.sendMessage", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.sendMessage", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_CALL, "tabs.update", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_CALL, "tabs.update", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onUpdated", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onUpdated", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_EVENT, "tabs.onMoved", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onMoved", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_EVENT, "tabs.onDetached", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onDetached", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_EVENT, "tabs.onAttached", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onAttached", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_EVENT, "tabs.onRemoved", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onRemoved", 0, LOOKUP_TAB_ID, NULL}, {Action::ACTION_API_EVENT, "tabs.onReplaced", 0, LOOKUP_TAB_ID, NULL},
{Action::ACTION_API_EVENT, "tabs.onReplaced", 0, LOOKUP_TAB_ID, NULL},
// Other APIs that accept URLs as strings
// Other APIs that accept URLs as strings {Action::ACTION_API_CALL, "bookmarks.create", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "bookmarks.create", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "bookmarks.update", 1, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "bookmarks.update", 1, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "cookies.get", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "cookies.get", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "cookies.getAll", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "cookies.getAll", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "cookies.remove", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "cookies.remove", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "cookies.set", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "cookies.set", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "downloads.download", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "downloads.download", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "history.addUrl", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "history.addUrl", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "history.deleteUrl", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "history.deleteUrl", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "history.getVisits", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "history.getVisits", 0, DICT_LOOKUP, "url"}, {Action::ACTION_API_CALL, "webstore.install", 0, NONE, NULL},
{Action::ACTION_API_CALL, "webstore.install", 0, NONE, NULL}, {Action::ACTION_API_CALL, "windows.create", 0, DICT_LOOKUP, "url"},
{Action::ACTION_API_CALL, "windows.create", 0, DICT_LOOKUP, "url"}, {Action::ACTION_DOM_ACCESS, "Document.location", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLButtonElement.formAction", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Document.location", 0, NONE, NULL}, {Action::ACTION_DOM_ACCESS, "HTMLEmbedElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Location.assign", 0, NONE, NULL}, {Action::ACTION_DOM_ACCESS, "HTMLFormElement.action", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Location.replace", 0, NONE, NULL}, {Action::ACTION_DOM_ACCESS, "HTMLFrameElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Window.location", 0, NONE, NULL}, {Action::ACTION_DOM_ACCESS, "HTMLHtmlElement.manifest", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "XMLHttpRequest.open", 1, NONE, NULL}, {Action::ACTION_DOM_ACCESS, "HTMLIFrameElement.src", 0, NONE, NULL},
}; {Action::ACTION_DOM_ACCESS, "HTMLImageElement.longDesc", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLImageElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLImageElement.lowsrc", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLInputElement.formAction", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLInputElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLLinkElement.href", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLMediaElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLMediaElement.currentSrc", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLModElement.cite", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLObjectElement.data", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLQuoteElement.cite", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLScriptElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLSourceElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLTrackElement.src", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "HTMLVideoElement.poster", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Location.assign", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Location.replace", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "Window.location", 0, NONE, NULL},
{Action::ACTION_DOM_ACCESS, "XMLHttpRequest.open", 1, NONE, NULL}};
// A singleton class which provides lookups into the kApiInfoTable data // A singleton class which provides lookups into the kApiInfoTable data
// structure. It inserts all data into a map on first lookup. // structure. It inserts all data into a map on first lookup.
......
...@@ -34,6 +34,19 @@ namespace { ...@@ -34,6 +34,19 @@ namespace {
const char kExtensionId[] = "abc"; const char kExtensionId[] = "abc";
const char* kUrlApiCalls[] = {
"HTMLButtonElement.formAction", "HTMLEmbedElement.src",
"HTMLFormElement.action", "HTMLFrameElement.src",
"HTMLHtmlElement.manifest", "HTMLIFrameElement.src",
"HTMLImageElement.longDesc", "HTMLImageElement.src",
"HTMLImageElement.lowsrc", "HTMLInputElement.formAction",
"HTMLInputElement.src", "HTMLLinkElement.href",
"HTMLMediaElement.src", "HTMLMediaElement.currentSrc",
"HTMLModElement.cite", "HTMLObjectElement.data",
"HTMLQuoteElement.cite", "HTMLScriptElement.src",
"HTMLSourceElement.src", "HTMLTrackElement.src",
"HTMLVideoElement.poster"};
} // namespace } // namespace
namespace extensions { namespace extensions {
...@@ -148,6 +161,30 @@ class ActivityLogTest : public ChromeRenderViewHostTestHarness { ...@@ -148,6 +161,30 @@ class ActivityLogTest : public ChromeRenderViewHostTestHarness {
ASSERT_EQ("http://www.google.co.uk/", action->arg_url().spec()); ASSERT_EQ("http://www.google.co.uk/", action->arg_url().spec());
} }
static void RetrieveActions_ArgUrlApiCalls(
scoped_ptr<std::vector<scoped_refptr<Action> > > actions) {
size_t api_calls_size = arraysize(kUrlApiCalls);
const base::DictionaryValue* other = NULL;
int dom_verb = -1;
ASSERT_EQ(api_calls_size, actions->size());
for (size_t i = 0; i < actions->size(); i++) {
scoped_refptr<Action> action = actions->at(i);
ASSERT_EQ(kExtensionId, action->extension_id());
ASSERT_EQ(Action::ACTION_DOM_ACCESS, action->action_type());
ASSERT_EQ(kUrlApiCalls[i], action->api_name());
ASSERT_EQ("[\"\\u003Carg_url>\"]",
ActivityLogPolicy::Util::Serialize(action->args()));
ASSERT_EQ("http://www.google.co.uk/", action->arg_url().spec());
other = action->other();
ASSERT_TRUE(other);
ASSERT_TRUE(
other->GetInteger(activity_log_constants::kActionDomVerb, &dom_verb));
ASSERT_EQ(DomActionType::SETTER, dom_verb);
}
}
ExtensionService* extension_service_; ExtensionService* extension_service_;
#if defined OS_CHROMEOS #if defined OS_CHROMEOS
...@@ -340,4 +377,32 @@ TEST_F(ActivityLogTest, UninstalledExtension) { ...@@ -340,4 +377,32 @@ TEST_F(ActivityLogTest, UninstalledExtension) {
base::Bind(ActivityLogTest::RetrieveActions_LogAndFetchActions0)); base::Bind(ActivityLogTest::RetrieveActions_LogAndFetchActions0));
} }
TEST_F(ActivityLogTest, ArgUrlApiCalls) {
ActivityLog* activity_log = ActivityLog::GetInstance(profile());
scoped_ptr<base::ListValue> args(new base::ListValue());
base::Time now = base::Time::Now();
int api_calls_size = arraysize(kUrlApiCalls);
scoped_refptr<Action> action;
for (int i = 0; i < api_calls_size; i++) {
action = new Action(kExtensionId,
now - base::TimeDelta::FromSeconds(i),
Action::ACTION_DOM_ACCESS,
kUrlApiCalls[i]);
action->mutable_args()->AppendString("http://www.google.co.uk");
action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb,
DomActionType::SETTER);
activity_log->LogAction(action);
}
activity_log->GetFilteredActions(
kExtensionId,
Action::ACTION_ANY,
"",
"",
"",
-1,
base::Bind(ActivityLogTest::RetrieveActions_ArgUrlApiCalls));
}
} // namespace extensions } // namespace extensions
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment