1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file.
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <string>
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/extensions/activity_log/activity_log.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension_builder.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/dns/mock_host_resolver.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/test/embedded_test_server/http_request.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/test/embedded_test_server/http_response.h"
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using net::test_server::BasicHttpResponse;
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using net::test_server::HttpResponse;
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)using net::test_server::HttpRequest;
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace extensions {
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ActivityLogApiTest : public ExtensionApiTest {
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ActivityLogApiTest() : saved_cmdline_(CommandLine::NO_PROGRAM) {}
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~ActivityLogApiTest() {
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ExtensionApiTest::SetUpCommandLine(&saved_cmdline_);
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    *CommandLine::ForCurrentProcess() = saved_cmdline_;
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ExtensionApiTest::SetUpCommandLine(command_line);
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    saved_cmdline_ = *CommandLine::ForCurrentProcess();
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    command_line->AppendSwitch(switches::kEnableExtensionActivityLogging);
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<HttpResponse> HandleRequest(const HttpRequest& request) {
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    scoped_ptr<BasicHttpResponse> response(new BasicHttpResponse);
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    response->set_code(net::HTTP_OK);
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    response->set_content("<html><head><title>ActivityLogTest</title>"
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                          "</head><body>Hello World</body></html>");
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return response.PassAs<HttpResponse>();
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  CommandLine saved_cmdline_;
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG)
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TODO(pmarch): fix flakiness on win debug - crbug.com/299393
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define MAYBE_TriggerEvent DISABLED_TriggerEvent
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#else
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_TriggerEvent TriggerEvent
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// The test extension sends a message to its 'friend'. The test completes
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// if it successfully sees the 'friend' receive the message.
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochIN_PROC_BROWSER_TEST_F(ActivityLogApiTest, MAYBE_TriggerEvent) {
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(true);
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  host_resolver()->AddRule("*", "127.0.0.1");
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(StartEmbeddedTestServer());
634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  embedded_test_server()->RegisterRequestHandler(
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      base::Bind(&ActivityLogApiTest::HandleRequest, base::Unretained(this)));
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const Extension* friend_extension = LoadExtensionIncognito(
677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      test_data_dir_.AppendASCII("activity_log_private/friend"));
68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(friend_extension);
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunExtensionTest("activity_log_private/test"));
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(false);
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace extensions
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
75