Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1587)

Side by Side Diff: content/browser/vibration_browsertest.cc

Issue 2731953003: [DeviceService] Replace vibration_browsertest.cc with layout tests. (Closed)
Patch Set: 'git cl format --js' for js/html Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 <stdint.h>
6 #include <utility>
7
8 #include "base/bind.h"
9 #include "base/macros.h"
10 #include "base/memory/ptr_util.h"
11 #include "base/strings/string_number_conversions.h"
12 #include "build/build_config.h"
13 #include "content/public/browser/render_frame_host.h"
14 #include "content/public/browser/web_contents.h"
15 #include "content/public/test/browser_test_utils.h"
16 #include "content/public/test/content_browser_test.h"
17 #include "content/public/test/content_browser_test_utils.h"
18 #include "content/public/test/test_utils.h"
19 #include "content/shell/browser/shell.h"
20 #include "device/vibration/vibration_manager.mojom.h"
21 #include "mojo/public/cpp/bindings/strong_binding.h"
22 #include "services/service_manager/public/cpp/interface_registry.h"
23
24 // These tests run against a dummy implementation of the VibrationManager
25 // service. That is, they verify that the service implementation is correctly
26 // exposed to the renderer, whatever the implementation is.
27
28 namespace content {
29
30 namespace {
31
32 // Global, record milliseconds when FakeVibrationManager::Vibrate got called.
33 int64_t g_vibrate_milliseconds = -1;
34
35 // Global, record whether FakeVibrationManager::Cancel got called.
36 bool g_cancelled = false;
37
38 // Global, wait for end of execution for FakeVibrationManager::Vibrate.
39 scoped_refptr<MessageLoopRunner> g_wait_vibrate_runner;
40
41 // Global, wait for end of execution for FakeVibrationManager::Cancel.
42 scoped_refptr<MessageLoopRunner> g_wait_cancel_runner;
43
44 void ResetGlobalValues() {
45 g_vibrate_milliseconds = -1;
46 g_cancelled = false;
47
48 g_wait_vibrate_runner = new MessageLoopRunner();
49 g_wait_cancel_runner = new MessageLoopRunner();
50 }
51
52 class FakeVibrationManager : public device::mojom::VibrationManager {
53 public:
54 FakeVibrationManager() {}
55 ~FakeVibrationManager() override {}
56
57 static void Create(device::mojom::VibrationManagerRequest request) {
58 mojo::MakeStrongBinding(base::MakeUnique<FakeVibrationManager>(),
59 std::move(request));
60 }
61
62 private:
63 void Vibrate(int64_t milliseconds, const VibrateCallback& callback) override {
64 g_vibrate_milliseconds = milliseconds;
65 callback.Run();
66 g_wait_vibrate_runner->Quit();
67 }
68
69 void Cancel(const CancelCallback& callback) override {
70 g_cancelled = true;
71 callback.Run();
72 g_wait_cancel_runner->Quit();
73 }
74 };
75
76 class VibrationTest : public ContentBrowserTest {
77 public:
78 VibrationTest() {}
79
80 void SetUpOnMainThread() override {
81 ResetGlobalValues();
82 GetMainFrame()->GetInterfaceRegistry()->AddInterface(
83 base::Bind(&FakeVibrationManager::Create));
84 }
85
86 bool Vibrate(int duration) { return Vibrate(duration, GetMainFrame()); }
87
88 bool Vibrate(int duration, RenderFrameHost* frame) {
89 bool result;
90 std::string script = "domAutomationController.send(navigator.vibrate(" +
91 base::IntToString(duration) + "))";
92 EXPECT_TRUE(ExecuteScriptAndExtractBool(frame, script, &result));
93 return result;
94 }
95
96 bool Cancel() {
97 bool result;
98 std::string script = "domAutomationController.send(navigator.vibrate(0))";
99 EXPECT_TRUE(ExecuteScriptAndExtractBool(GetMainFrame(), script, &result));
100 return result;
101 }
102
103 bool DestroyIframe() {
104 std::string script =
105 "document.getElementById('test_iframe').parentNode.innerHTML = ''";
106 return ExecuteScript(GetMainFrame(), script);
107 }
108
109 RenderFrameHost* GetMainFrame() {
110 return shell()->web_contents()->GetMainFrame();
111 }
112
113 private:
114 DISALLOW_COPY_AND_ASSIGN(VibrationTest);
115 };
116
117 IN_PROC_BROWSER_TEST_F(VibrationTest, Vibrate) {
118 ASSERT_EQ(-1, g_vibrate_milliseconds);
119
120 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "simple_page.html")));
121 ASSERT_TRUE(Vibrate(1234));
122 g_wait_vibrate_runner->Run();
123
124 ASSERT_EQ(1234, g_vibrate_milliseconds);
125 }
126
127 IN_PROC_BROWSER_TEST_F(VibrationTest, Cancel) {
128 ASSERT_FALSE(g_cancelled);
129
130 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "simple_page.html")));
131 ASSERT_TRUE(Vibrate(1234));
132 g_wait_vibrate_runner->Run();
133 ASSERT_TRUE(Cancel());
134 g_wait_cancel_runner->Run();
135
136 ASSERT_TRUE(g_cancelled);
137 }
138
139 IN_PROC_BROWSER_TEST_F(VibrationTest,
140 CancelVibrationFromMainFrameWhenMainFrameIsReloaded) {
141 ASSERT_FALSE(g_cancelled);
142
143 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "simple_page.html")));
144 ASSERT_TRUE(Vibrate(1234));
145 g_wait_vibrate_runner->Run();
146 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "simple_page.html")));
147 g_wait_cancel_runner->Run();
148
149 ASSERT_TRUE(g_cancelled);
150 }
151
152 IN_PROC_BROWSER_TEST_F(VibrationTest,
153 CancelVibrationFromSubFrameWhenSubFrameIsReloaded) {
154 ASSERT_FALSE(g_cancelled);
155
156 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "page_with_iframe.html")));
157 RenderFrameHost* iframe = ChildFrameAt(GetMainFrame(), 0);
158 iframe->GetInterfaceRegistry()->AddInterface(
159 base::Bind(&FakeVibrationManager::Create));
160 ASSERT_TRUE(Vibrate(1234, iframe));
161 g_wait_vibrate_runner->Run();
162 ASSERT_TRUE(NavigateIframeToURL(shell()->web_contents(), "test_iframe",
163 GetTestUrl(".", "title1.html")));
164 g_wait_cancel_runner->Run();
165
166 ASSERT_TRUE(g_cancelled);
167 }
168
169 IN_PROC_BROWSER_TEST_F(VibrationTest,
170 CancelVibrationFromSubFrameWhenMainFrameIsReloaded) {
171 ASSERT_FALSE(g_cancelled);
172
173 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "page_with_iframe.html")));
174 RenderFrameHost* iframe = ChildFrameAt(GetMainFrame(), 0);
175 iframe->GetInterfaceRegistry()->AddInterface(
176 base::Bind(&FakeVibrationManager::Create));
177 ASSERT_TRUE(Vibrate(1234, iframe));
178 g_wait_vibrate_runner->Run();
179 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "page_with_iframe.html")));
180 g_wait_cancel_runner->Run();
181
182 ASSERT_TRUE(g_cancelled);
183 }
184
185 IN_PROC_BROWSER_TEST_F(VibrationTest,
186 CancelVibrationFromSubFrameWhenSubFrameIsDestroyed) {
187 ASSERT_FALSE(g_cancelled);
188
189 ASSERT_TRUE(NavigateToURL(shell(), GetTestUrl(".", "page_with_iframe.html")));
190 RenderFrameHost* iframe = ChildFrameAt(GetMainFrame(), 0);
191 iframe->GetInterfaceRegistry()->AddInterface(
192 base::Bind(&FakeVibrationManager::Create));
193 ASSERT_TRUE(Vibrate(1234, iframe));
194 g_wait_vibrate_runner->Run();
195 ASSERT_TRUE(DestroyIframe());
196 g_wait_cancel_runner->Run();
197
198 ASSERT_TRUE(g_cancelled);
199 }
200
201 } // namespace
202
203 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698