12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/run_loop.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/synchronization/waitable_event.h" 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/activity_log/activity_action_constants.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/extensions/activity_log/activity_log.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/prerender/prerender_handle.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/prerender/prerender_manager_factory.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_constants.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/chrome_render_view_host_test_harness.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/browser/web_contents.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/browser/extension_registry.h" 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/uninstall_reason.h" 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "extensions/common/dom_action_types.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension_builder.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sql/statement.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace { 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)const char kExtensionId[] = "abc"; 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* kUrlApiCalls[] = { 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLButtonElement.formAction", "HTMLEmbedElement.src", 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLFormElement.action", "HTMLFrameElement.src", 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLHtmlElement.manifest", "HTMLIFrameElement.src", 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLImageElement.longDesc", "HTMLImageElement.src", 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLImageElement.lowsrc", "HTMLInputElement.formAction", 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLInputElement.src", "HTMLLinkElement.href", 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLMediaElement.src", "HTMLMediaElement.currentSrc", 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLModElement.cite", "HTMLObjectElement.data", 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLQuoteElement.cite", "HTMLScriptElement.src", 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLSourceElement.src", "HTMLTrackElement.src", 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "HTMLVideoElement.poster"}; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ActivityLogTest : public ChromeRenderViewHostTestHarness { 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected: 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void SetUp() OVERRIDE { 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ChromeRenderViewHostTestHarness::SetUp(); 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined OS_CHROMEOS 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_user_manager_.reset(new chromeos::ScopedTestUserManager()); 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) switches::kEnableExtensionActivityLogging); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switches::kEnableExtensionActivityLogTesting); 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) extension_service_ = static_cast<TestExtensionSystem*>( 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExtensionSystem::Get(profile()))->CreateExtensionService 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) (&command_line, base::FilePath(), false); 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::RunLoop().RunUntilIdle(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void TearDown() OVERRIDE { 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined OS_CHROMEOS 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_user_manager_.reset(); 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ChromeRenderViewHostTestHarness::TearDown(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static void RetrieveActions_LogAndFetchActions0( 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<std::vector<scoped_refptr<Action> > > i) { 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(0, static_cast<int>(i->size())); 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) static void RetrieveActions_LogAndFetchActions2( 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<std::vector<scoped_refptr<Action> > > i) { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2, static_cast<int>(i->size())); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void SetPolicy(bool log_arguments) { 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (log_arguments) 9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) activity_log->SetDatabasePolicy(ActivityLogPolicy::POLICY_FULLSTREAM); 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch else 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) activity_log->SetDatabasePolicy(ActivityLogPolicy::POLICY_COUNTS); 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool GetDatabaseEnabled() { 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return activity_log->IsDatabaseEnabled(); 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool GetWatchdogActive() { 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return activity_log->IsWatchdogAppActive(); 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static void Arguments_Prerender( 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<std::vector<scoped_refptr<Action> > > i) { 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_EQ(1U, i->size()); 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<Action> last = i->front(); 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("odlameecjipmbmbejkplpemijjgpljce", last->extension_id()); 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(Action::ACTION_CONTENT_SCRIPT, last->action_type()); 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("[\"script\"]", 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLogPolicy::Util::Serialize(last->args())); 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("http://www.google.com/", last->SerializePageUrl()); 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("{\"prerender\":true}", 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLogPolicy::Util::Serialize(last->other())); 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", last->api_name()); 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", last->page_title()); 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("", last->SerializeArgUrl()); 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static void RetrieveActions_ArgUrlExtraction( 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<std::vector<scoped_refptr<Action> > > i) { 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* other = NULL; 1318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int dom_verb = -1; 1328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_EQ(4U, i->size()); 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_refptr<Action> action = i->at(0); 13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_EQ("XMLHttpRequest.open", action->api_name()); 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ("[\"POST\",\"\\u003Carg_url>\"]", 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLogPolicy::Util::Serialize(action->args())); 13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_EQ("http://api.google.com/", action->arg_url().spec()); 1398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Test that the dom_verb field was changed to XHR (from METHOD). This 1408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // could be tested on all retrieved XHR actions but it would be redundant, 1418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // so just test once. 1428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) other = action->other(); 1438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(other); 1448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(other->GetInteger(activity_log_constants::kActionDomVerb, 1458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) &dom_verb)); 1468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_EQ(DomActionType::XHR, dom_verb); 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) action = i->at(1); 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_EQ("XMLHttpRequest.open", action->api_name()); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ("[\"POST\",\"\\u003Carg_url>\"]", 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ActivityLogPolicy::Util::Serialize(action->args())); 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_EQ("http://www.google.com/api/", action->arg_url().spec()); 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) action = i->at(2); 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_EQ("XMLHttpRequest.open", action->api_name()); 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_EQ("[\"POST\",\"/api/\"]", 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ActivityLogPolicy::Util::Serialize(action->args())); 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_FALSE(action->arg_url().is_valid()); 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) action = i->at(3); 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_EQ("windows.create", action->api_name()); 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ("[{\"url\":\"\\u003Carg_url>\"}]", 16358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLogPolicy::Util::Serialize(action->args())); 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ("http://www.google.co.uk/", action->arg_url().spec()); 165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static void RetrieveActions_ArgUrlApiCalls( 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<std::vector<scoped_refptr<Action> > > actions) { 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t api_calls_size = arraysize(kUrlApiCalls); 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* other = NULL; 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int dom_verb = -1; 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(api_calls_size, actions->size()); 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < actions->size(); i++) { 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<Action> action = actions->at(i); 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(kExtensionId, action->extension_id()); 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(Action::ACTION_DOM_ACCESS, action->action_type()); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(kUrlApiCalls[i], action->api_name()); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ("[\"\\u003Carg_url>\"]", 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ActivityLogPolicy::Util::Serialize(action->args())); 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ("http://www.google.co.uk/", action->arg_url().spec()); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) other = action->other(); 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(other); 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE( 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) other->GetInteger(activity_log_constants::kActionDomVerb, &dom_verb)); 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(DomActionType::SETTER, dom_verb); 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExtensionService* extension_service_; 192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined OS_CHROMEOS 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<chromeos::ScopedTestUserManager> test_user_manager_; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ActivityLogTest, Construct) { 20158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(GetDatabaseEnabled()); 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(GetWatchdogActive()); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ActivityLogTest, LogAndFetchActions) { 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::ListValue> args(new base::ListValue()); 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(GetDatabaseEnabled()); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Write some API calls 211a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_refptr<Action> action = new Action(kExtensionId, 212a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Time::Now(), 213a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Action::ACTION_API_CALL, 214a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "tabs.testMethod"); 215a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) activity_log->LogAction(action); 216a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) action = new Action(kExtensionId, 217a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Time::Now(), 218a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Action::ACTION_DOM_ACCESS, 219a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) "document.write"); 220a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) action->set_page_url(GURL("http://www.google.com")); 221a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) activity_log->LogAction(action); 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) activity_log->GetFilteredActions( 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kExtensionId, 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Action::ACTION_ANY, 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 0, 230d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Bind(ActivityLogTest::RetrieveActions_LogAndFetchActions2)); 231868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(ActivityLogTest, LogPrerender) { 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<const Extension> extension = 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionBuilder() 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .SetManifest(DictionaryBuilder() 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Set("name", "Test extension") 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Set("version", "1.0.0") 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Set("manifest_version", 2)) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Build(); 2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension_service_->AddExtension(extension.get()); 242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 24358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(GetDatabaseEnabled()); 244868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL url("http://www.google.com"); 245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prerender::PrerenderManager* prerender_manager = 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prerender::PrerenderManagerFactory::GetForProfile( 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Profile::FromBrowserContext(profile())); 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prerender_manager->OnCookieStoreLoaded(); 251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const gfx::Size kSize(640, 480); 253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<prerender::PrerenderHandle> prerender_handle( 254868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prerender_manager->AddPrerenderFromLocalPredictor( 255868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) url, 256ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch web_contents()->GetController().GetDefaultSessionStorageNamespace(), 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kSize)); 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::vector<content::WebContents*> contentses = 260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prerender_manager->GetAllPrerenderingContents(); 261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_EQ(1U, contentses.size()); 262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::WebContents *contents = contentses[0]; 263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(prerender_manager->IsWebContentsPrerendering(contents, NULL)); 264868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ScriptExecutionObserver::ExecutingScriptsMap executing_scripts; 266868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) executing_scripts[extension->id()].insert("script"); 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static_cast<ScriptExecutionObserver*>(activity_log) 2696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ->OnScriptsExecuted(contents, executing_scripts, url); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) activity_log->GetFilteredActions( 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extension->id(), 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Action::ACTION_ANY, 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 27558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 0, 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(ActivityLogTest::Arguments_Prerender)); 279868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 280868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) prerender_manager->CancelAllPrerenders(); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(ActivityLogTest, ArgUrlExtraction) { 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<base::ListValue> args(new base::ListValue()); 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Time now = base::Time::Now(); 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 28958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Submit a DOM API call which should have its URL extracted into the arg_url 29058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // field. 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_refptr<Action> action = new Action(kExtensionId, 29258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) now, 29358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Action::ACTION_DOM_ACCESS, 29458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "XMLHttpRequest.open"); 29568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action->set_page_url(GURL("http://www.google.com/")); 29668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action->mutable_args()->AppendString("POST"); 29768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action->mutable_args()->AppendString("http://api.google.com/"); 2988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb, 2998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DomActionType::METHOD); 30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) activity_log->LogAction(action); 30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Submit a DOM API call with a relative URL in the argument, which should be 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // resolved relative to the page URL. 30458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) action = new Action(kExtensionId, 30558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) now - base::TimeDelta::FromSeconds(1), 30668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Action::ACTION_DOM_ACCESS, 30768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "XMLHttpRequest.open"); 30868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action->set_page_url(GURL("http://www.google.com/")); 30968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action->mutable_args()->AppendString("POST"); 31068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action->mutable_args()->AppendString("/api/"); 3118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb, 3128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DomActionType::METHOD); 31368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) activity_log->LogAction(action); 31468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Submit a DOM API call with a relative URL but no base page URL against 3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // which to resolve. 31768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) action = new Action(kExtensionId, 31868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) now - base::TimeDelta::FromSeconds(2), 3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Action::ACTION_DOM_ACCESS, 3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) "XMLHttpRequest.open"); 3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) action->mutable_args()->AppendString("POST"); 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) action->mutable_args()->AppendString("/api/"); 3238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb, 3248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DomActionType::METHOD); 3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) activity_log->LogAction(action); 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Submit an API call with an embedded URL. 3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) action = new Action(kExtensionId, 3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) now - base::TimeDelta::FromSeconds(3), 33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Action::ACTION_API_CALL, 33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "windows.create"); 33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) action->set_args( 33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ListBuilder() 33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) .Append(DictionaryBuilder().Set("url", "http://www.google.co.uk")) 33558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) .Build()); 33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) activity_log->LogAction(action); 33758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) activity_log->GetFilteredActions( 33958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kExtensionId, 34058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Action::ACTION_ANY, 34158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 34258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 34358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "", 344d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) -1, 34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(ActivityLogTest::RetrieveActions_ArgUrlExtraction)); 34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 34758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 348d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(ActivityLogTest, UninstalledExtension) { 349d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<const Extension> extension = 350d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ExtensionBuilder() 351d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) .SetManifest(DictionaryBuilder() 352d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) .Set("name", "Test extension") 353d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) .Set("version", "1.0.0") 354d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) .Set("manifest_version", 2)) 355d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) .Build(); 356d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 357d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 358d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<base::ListValue> args(new base::ListValue()); 359d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(GetDatabaseEnabled()); 360d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 361d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Write some API calls 362d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_refptr<Action> action = new Action(extension->id(), 363d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Time::Now(), 364d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Action::ACTION_API_CALL, 365d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "tabs.testMethod"); 366d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) activity_log->LogAction(action); 367d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) action = new Action(extension->id(), 368d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Time::Now(), 369d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Action::ACTION_DOM_ACCESS, 370d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "document.write"); 371d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) action->set_page_url(GURL("http://www.google.com")); 372d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) activity_log->OnExtensionUninstalled( 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL, extension.get(), extensions::UNINSTALL_REASON_FOR_TESTING); 375d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) activity_log->GetFilteredActions( 376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) extension->id(), 377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Action::ACTION_ANY, 378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "", 379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "", 380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "", 381d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) -1, 382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::Bind(ActivityLogTest::RetrieveActions_LogAndFetchActions0)); 383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ActivityLogTest, ArgUrlApiCalls) { 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ActivityLog* activity_log = ActivityLog::GetInstance(profile()); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> args(new base::ListValue()); 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time now = base::Time::Now(); 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int api_calls_size = arraysize(kUrlApiCalls); 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<Action> action; 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (int i = 0; i < api_calls_size; i++) { 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) action = new Action(kExtensionId, 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) now - base::TimeDelta::FromSeconds(i), 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Action::ACTION_DOM_ACCESS, 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kUrlApiCalls[i]); 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) action->mutable_args()->AppendString("http://www.google.co.uk"); 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) action->mutable_other()->SetInteger(activity_log_constants::kActionDomVerb, 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DomActionType::SETTER); 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) activity_log->LogAction(action); 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) activity_log->GetFilteredActions( 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kExtensionId, 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Action::ACTION_ANY, 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "", 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "", 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "", 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) -1, 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(ActivityLogTest::RetrieveActions_ArgUrlApiCalls)); 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 414