• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 "extensions/browser/api/test/test_api.h"
6 
7 #include <string>
8 
9 #include "base/command_line.h"
10 #include "base/memory/singleton.h"
11 #include "content/public/browser/notification_service.h"
12 #include "content/public/common/content_switches.h"
13 #include "extensions/browser/extension_function_dispatcher.h"
14 #include "extensions/browser/extension_system.h"
15 #include "extensions/browser/notification_types.h"
16 #include "extensions/common/api/test.h"
17 
18 namespace {
19 
20 // If you see this error in your test, you need to set the config state
21 // to be returned by chrome.test.getConfig().  Do this by calling
22 // TestGetConfigFunction::set_test_config_state(Value* state)
23 // in test set up.
24 const char kNoTestConfigDataError[] = "Test configuration was not set.";
25 
26 const char kNotTestProcessError[] =
27     "The chrome.test namespace is only available in tests.";
28 
29 }  // namespace
30 
31 namespace extensions {
32 
33 namespace Log = core_api::test::Log;
34 namespace NotifyFail = core_api::test::NotifyFail;
35 namespace PassMessage = core_api::test::PassMessage;
36 namespace WaitForRoundTrip = core_api::test::WaitForRoundTrip;
37 
~TestExtensionFunction()38 TestExtensionFunction::~TestExtensionFunction() {}
39 
RunSync()40 bool TestExtensionFunction::RunSync() {
41   if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kTestType)) {
42     error_ = kNotTestProcessError;
43     return false;
44   }
45   return RunSafe();
46 }
47 
~TestNotifyPassFunction()48 TestNotifyPassFunction::~TestNotifyPassFunction() {}
49 
RunSafe()50 bool TestNotifyPassFunction::RunSafe() {
51   content::NotificationService::current()->Notify(
52       extensions::NOTIFICATION_EXTENSION_TEST_PASSED,
53       content::Source<content::BrowserContext>(dispatcher()->browser_context()),
54       content::NotificationService::NoDetails());
55   return true;
56 }
57 
~TestNotifyFailFunction()58 TestNotifyFailFunction::~TestNotifyFailFunction() {}
59 
RunSafe()60 bool TestNotifyFailFunction::RunSafe() {
61   scoped_ptr<NotifyFail::Params> params(NotifyFail::Params::Create(*args_));
62   EXTENSION_FUNCTION_VALIDATE(params.get());
63   content::NotificationService::current()->Notify(
64       extensions::NOTIFICATION_EXTENSION_TEST_FAILED,
65       content::Source<content::BrowserContext>(dispatcher()->browser_context()),
66       content::Details<std::string>(&params->message));
67   return true;
68 }
69 
~TestLogFunction()70 TestLogFunction::~TestLogFunction() {}
71 
RunSafe()72 bool TestLogFunction::RunSafe() {
73   scoped_ptr<Log::Params> params(Log::Params::Create(*args_));
74   EXTENSION_FUNCTION_VALIDATE(params.get());
75   VLOG(1) << params->message;
76   return true;
77 }
78 
RunAsync()79 bool TestSendMessageFunction::RunAsync() {
80   scoped_ptr<PassMessage::Params> params(PassMessage::Params::Create(*args_));
81   EXTENSION_FUNCTION_VALIDATE(params.get());
82   content::NotificationService::current()->Notify(
83       extensions::NOTIFICATION_EXTENSION_TEST_MESSAGE,
84       content::Source<TestSendMessageFunction>(this),
85       content::Details<std::string>(&params->message));
86   return true;
87 }
88 
~TestSendMessageFunction()89 TestSendMessageFunction::~TestSendMessageFunction() {}
90 
Reply(const std::string & message)91 void TestSendMessageFunction::Reply(const std::string& message) {
92   SetResult(new base::StringValue(message));
93   SendResponse(true);
94 }
95 
ReplyWithError(const std::string & error)96 void TestSendMessageFunction::ReplyWithError(const std::string& error) {
97   error_ = error;
98   SendResponse(false);
99 }
100 
101 // static
set_test_config_state(base::DictionaryValue * value)102 void TestGetConfigFunction::set_test_config_state(
103     base::DictionaryValue* value) {
104   TestConfigState* test_config_state = TestConfigState::GetInstance();
105   test_config_state->set_config_state(value);
106 }
107 
TestConfigState()108 TestGetConfigFunction::TestConfigState::TestConfigState()
109     : config_state_(NULL) {}
110 
111 // static
112 TestGetConfigFunction::TestConfigState*
GetInstance()113 TestGetConfigFunction::TestConfigState::GetInstance() {
114   return Singleton<TestConfigState>::get();
115 }
116 
~TestGetConfigFunction()117 TestGetConfigFunction::~TestGetConfigFunction() {}
118 
RunSafe()119 bool TestGetConfigFunction::RunSafe() {
120   TestConfigState* test_config_state = TestConfigState::GetInstance();
121 
122   if (!test_config_state->config_state()) {
123     error_ = kNoTestConfigDataError;
124     return false;
125   }
126 
127   SetResult(test_config_state->config_state()->DeepCopy());
128   return true;
129 }
130 
~TestWaitForRoundTripFunction()131 TestWaitForRoundTripFunction::~TestWaitForRoundTripFunction() {}
132 
RunSafe()133 bool TestWaitForRoundTripFunction::RunSafe() {
134   scoped_ptr<WaitForRoundTrip::Params> params(
135       WaitForRoundTrip::Params::Create(*args_));
136   SetResult(new base::StringValue(params->message));
137   return true;
138 }
139 
140 }  // namespace extensions
141