OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 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 "content/public/browser/content_browser_client.h" | |
6 #include "content/public/browser/web_contents.h" | |
timvolodine
2015/09/28 15:05:53
is this needed?
leonhsl(Using Gerrit)
2015/09/29 07:28:00
Acknowledged. Removed.
| |
7 #include "content/public/common/content_client.h" | |
timvolodine
2015/09/28 15:05:53
and this?
leonhsl(Using Gerrit)
2015/09/29 07:28:00
Acknowledged. Removed.
| |
8 #include "content/public/common/service_registry.h" | |
9 #include "content/public/test/content_browser_test.h" | |
10 #include "content/public/test/content_browser_test_utils.h" | |
11 #include "content/public/test/test_utils.h" | |
12 #include "content/shell/browser/shell.h" | |
13 #include "content/shell/browser/shell_content_browser_client.h" | |
14 #include "device/vibration/vibration_manager.mojom.h" | |
15 #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" | |
16 | |
17 // These tests run against a dummy implementation of the VibrationManager | |
18 // service. | |
19 // That is, they verify that the service implementation is correctly exposed to | |
timvolodine
2015/09/28 15:05:53
nit: maybe put on previous line for better readabi
leonhsl(Using Gerrit)
2015/09/29 07:28:00
Done.
| |
20 // the renderer, whatever the implementation is. | |
21 | |
22 namespace content { | |
23 | |
24 namespace { | |
25 | |
26 // Global, record milliseconds when Vibrate() got called. | |
27 int64 g_vibrate_milliseconds; | |
28 // Global, record whether Cancel() got called. | |
29 bool g_cancelled; | |
30 // Global, wait for end of execution for VibrationManager API Vibrate(). | |
31 scoped_refptr<content::MessageLoopRunner> g_wait_vibrate_runner; | |
32 // Global, wait for end of execution for VibrationManager API Cancel(). | |
33 scoped_refptr<content::MessageLoopRunner> g_wait_cancel_runner; | |
34 | |
35 void ResetGlobalValues() { | |
36 g_vibrate_milliseconds = -1; | |
37 g_cancelled = false; | |
38 | |
39 g_wait_vibrate_runner = new content::MessageLoopRunner(); | |
40 g_wait_cancel_runner = new content::MessageLoopRunner(); | |
41 } | |
42 | |
43 class FakeVibrationManager : public device::VibrationManager { | |
44 public: | |
45 static void Create(mojo::InterfaceRequest<VibrationManager> request) { | |
46 new FakeVibrationManager(request.Pass()); | |
47 } | |
48 | |
49 private: | |
50 FakeVibrationManager(mojo::InterfaceRequest<VibrationManager> request) | |
51 : binding_(this, request.Pass()) {} | |
52 ~FakeVibrationManager() override {} | |
53 | |
54 void Vibrate(int64 milliseconds) override { | |
55 g_vibrate_milliseconds = milliseconds; | |
56 g_wait_vibrate_runner->Quit(); | |
57 } | |
58 | |
59 void Cancel() override { | |
60 g_cancelled = true; | |
61 g_wait_cancel_runner->Quit(); | |
62 } | |
63 | |
64 mojo::StrongBinding<VibrationManager> binding_; | |
65 }; | |
66 | |
67 // Overrides the default service implementation with the test implementation | |
68 // declared above. | |
69 class TestContentBrowserClient : public ContentBrowserClient { | |
70 public: | |
71 void RegisterRenderProcessMojoServices(ServiceRegistry* registry) override { | |
72 registry->AddService(base::Bind(&FakeVibrationManager::Create)); | |
73 } | |
74 | |
75 #if defined(OS_ANDROID) | |
76 void GetAdditionalMappedFilesForChildProcess( | |
77 const base::CommandLine& command_line, | |
78 int child_process_id, | |
79 FileDescriptorInfo* mappings, | |
80 std::map<int, base::MemoryMappedFile::Region>* regions) override { | |
81 ShellContentBrowserClient::Get()->GetAdditionalMappedFilesForChildProcess( | |
82 command_line, child_process_id, mappings, regions); | |
83 } | |
84 #endif // defined(OS_ANDROID) | |
85 }; | |
86 | |
87 class VibrationManagerIntegrationTest : public ContentBrowserTest { | |
88 public: | |
89 VibrationManagerIntegrationTest() {} | |
90 | |
91 void SetUpOnMainThread() override { | |
92 old_client_ = SetBrowserClientForTesting(&test_client_); | |
93 } | |
94 | |
95 void TearDownOnMainThread() override { | |
96 SetBrowserClientForTesting(old_client_); | |
97 } | |
98 | |
99 private: | |
100 TestContentBrowserClient test_client_; | |
101 ContentBrowserClient* old_client_; | |
102 | |
103 DISALLOW_COPY_AND_ASSIGN(VibrationManagerIntegrationTest); | |
104 }; | |
105 | |
106 IN_PROC_BROWSER_TEST_F(VibrationManagerIntegrationTest, Vibrate) { | |
107 // From JavaScript call navigator.vibrate(3000), | |
108 // then check the global value g_vibrate_milliseconds. | |
109 ResetGlobalValues(); | |
timvolodine
2015/09/28 15:05:53
should this be in SetUp somewhere?
leonhsl(Using Gerrit)
2015/09/29 07:28:00
Acknowledged. Moved into SetUpOnMainThread().
| |
110 ASSERT_EQ(-1, g_vibrate_milliseconds); | |
111 ASSERT_FALSE(g_wait_vibrate_runner->loop_running()); | |
112 | |
113 GURL test_url = | |
114 GetTestUrl("vibration", "vibration_manager_vibrate_test.html"); | |
115 shell()->LoadURL(test_url); | |
116 // Wait until VibrationManager::Vibrate() got called. | |
117 g_wait_vibrate_runner->Run(); | |
timvolodine
2015/09/11 17:44:04
would base::WaitableEvent be a cleaner solution he
leonhsl(Using Gerrit)
2015/09/14 10:35:34
Because both browser test code and the VibrationMa
timvolodine
2015/09/28 15:05:53
ok
| |
118 | |
119 EXPECT_EQ(3000, g_vibrate_milliseconds); | |
120 } | |
121 | |
122 IN_PROC_BROWSER_TEST_F(VibrationManagerIntegrationTest, Cancel) { | |
123 // From JavaScript call navigator.vibrate(0), | |
124 // then check the global value g_cancelled. | |
125 ResetGlobalValues(); | |
timvolodine
2015/09/28 15:05:53
same question
leonhsl(Using Gerrit)
2015/09/29 07:28:00
Acknowledged. Moved into SetUpOnMainThread().
| |
126 ASSERT_FALSE(g_cancelled); | |
127 ASSERT_FALSE(g_wait_cancel_runner->loop_running()); | |
128 | |
129 GURL test_url = GetTestUrl("vibration", "vibration_manager_cancel_test.html"); | |
130 shell()->LoadURL(test_url); | |
131 // Wait until VibrationManager::Cancel() got called. | |
132 g_wait_cancel_runner->Run(); | |
133 | |
134 EXPECT_TRUE(g_cancelled); | |
135 } | |
136 | |
137 } // namespace | |
138 | |
139 } // namespace content | |
OLD | NEW |