OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host.
h" | |
6 | |
7 #include "base/logging.h" | 5 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host.
h" |
9 #include "content/browser/screen_orientation/screen_orientation_provider.h" | 8 #include "content/browser/screen_orientation/screen_orientation_provider.h" |
10 #include "content/common/screen_orientation_messages.h" | 9 #include "content/common/screen_orientation_messages.h" |
| 10 #include "content/public/browser/browser_context.h" |
| 11 #include "content/public/test/mock_render_process_host.h" |
| 12 #include "content/public/test/test_browser_context.h" |
| 13 #include "content/public/test/test_browser_thread_bundle.h" |
11 #include "content/public/test/test_utils.h" | 14 #include "content/public/test/test_utils.h" |
12 #include "ipc/ipc_test_sink.h" | 15 #include "ipc/ipc_test_sink.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
14 | 17 |
15 namespace content { | 18 namespace content { |
16 | 19 |
17 class MockScreenOrientationProvider : public ScreenOrientationProvider { | 20 class MockScreenOrientationProvider : public ScreenOrientationProvider { |
18 public: | 21 public: |
19 MockScreenOrientationProvider() | 22 MockScreenOrientationProvider() |
20 : orientation_(blink::WebScreenOrientationLockPortraitPrimary), | 23 : orientation_(blink::WebScreenOrientationLockPortraitPrimary), |
(...skipping 22 matching lines...) Expand all Loading... |
43 blink::WebScreenOrientationLockType orientation_; | 46 blink::WebScreenOrientationLockType orientation_; |
44 bool unlock_called_; | 47 bool unlock_called_; |
45 | 48 |
46 DISALLOW_COPY_AND_ASSIGN(MockScreenOrientationProvider); | 49 DISALLOW_COPY_AND_ASSIGN(MockScreenOrientationProvider); |
47 }; | 50 }; |
48 | 51 |
49 class ScreenOrientationDispatcherHostWithSink FINAL : | 52 class ScreenOrientationDispatcherHostWithSink FINAL : |
50 public ScreenOrientationDispatcherHost { | 53 public ScreenOrientationDispatcherHost { |
51 public: | 54 public: |
52 explicit ScreenOrientationDispatcherHostWithSink(IPC::TestSink* sink) | 55 explicit ScreenOrientationDispatcherHostWithSink(IPC::TestSink* sink) |
53 : ScreenOrientationDispatcherHost(NULL), sink_(sink) {} | 56 : ScreenOrientationDispatcherHost() , sink_(sink) {} |
54 | 57 |
55 virtual bool Send(IPC::Message* message) OVERRIDE { | 58 virtual bool Send(IPC::Message* message) OVERRIDE { |
56 return sink_->Send(message); | 59 return sink_->Send(message); |
57 } | 60 } |
58 | 61 |
59 private: | 62 private: |
60 virtual ~ScreenOrientationDispatcherHostWithSink() { } | 63 virtual ~ScreenOrientationDispatcherHostWithSink() { } |
61 | 64 |
62 IPC::TestSink* sink_; | 65 IPC::TestSink* sink_; |
63 }; | 66 }; |
64 | 67 |
65 class ScreenOrientationDispatcherHostTest : public testing::Test { | 68 class ScreenOrientationDispatcherHostTest : public testing::Test { |
66 protected: | 69 protected: |
67 virtual ScreenOrientationDispatcherHost* CreateDispatcher() { | 70 virtual ScreenOrientationDispatcherHost* CreateDispatcher() { |
68 return new ScreenOrientationDispatcherHost(NULL); | 71 return new ScreenOrientationDispatcherHost(); |
69 } | 72 } |
70 | 73 |
71 virtual void SetUp() OVERRIDE { | 74 virtual void SetUp() OVERRIDE { |
72 provider_ = new MockScreenOrientationProvider(); | 75 provider_ = new MockScreenOrientationProvider(); |
73 | 76 |
74 dispatcher_.reset(CreateDispatcher()); | 77 dispatcher_ = CreateDispatcher(); |
75 dispatcher_->SetProviderForTests(provider_); | 78 dispatcher_->SetProviderForTests(provider_); |
76 } | 79 } |
77 | 80 |
78 int routing_id() const { | |
79 // We return a fake routing_id() in the context of this test. | |
80 return 0; | |
81 } | |
82 | |
83 // The dispatcher_ owns the provider_ but we still want to access it. | 81 // The dispatcher_ owns the provider_ but we still want to access it. |
84 MockScreenOrientationProvider* provider_; | 82 MockScreenOrientationProvider* provider_; |
85 scoped_ptr<ScreenOrientationDispatcherHost> dispatcher_; | 83 scoped_refptr<ScreenOrientationDispatcherHost> dispatcher_; |
86 }; | 84 }; |
87 | 85 |
88 class ScreenOrientationDispatcherHostWithSinkTest : | 86 class ScreenOrientationDispatcherHostWithSinkTest : |
89 public ScreenOrientationDispatcherHostTest { | 87 public ScreenOrientationDispatcherHostTest { |
90 protected: | 88 protected: |
91 virtual ScreenOrientationDispatcherHost* CreateDispatcher() OVERRIDE { | 89 virtual ScreenOrientationDispatcherHost* CreateDispatcher() OVERRIDE { |
92 return new ScreenOrientationDispatcherHostWithSink(&sink_); | 90 return new ScreenOrientationDispatcherHostWithSink(&sink_); |
93 } | 91 } |
94 | 92 |
95 const IPC::TestSink& sink() const { | 93 const IPC::TestSink& sink() const { |
(...skipping 22 matching lines...) Expand all Loading... |
118 // Unfortunately, initializer list constructor for std::list is not yet | 116 // Unfortunately, initializer list constructor for std::list is not yet |
119 // something we can use. | 117 // something we can use. |
120 // Keep this in sync with |orientationsToTest|. | 118 // Keep this in sync with |orientationsToTest|. |
121 int orientationsToTestCount = 7; | 119 int orientationsToTestCount = 7; |
122 | 120 |
123 for (int i = 0; i < orientationsToTestCount; ++i) { | 121 for (int i = 0; i < orientationsToTestCount; ++i) { |
124 bool message_was_handled = false; | 122 bool message_was_handled = false; |
125 blink::WebScreenOrientationLockType orientation = orientationsToTest[i]; | 123 blink::WebScreenOrientationLockType orientation = orientationsToTest[i]; |
126 | 124 |
127 message_was_handled = dispatcher_->OnMessageReceived( | 125 message_was_handled = dispatcher_->OnMessageReceived( |
128 ScreenOrientationHostMsg_LockRequest(routing_id(), orientation, 0), | 126 ScreenOrientationHostMsg_LockRequest(orientation, 0)); |
129 NULL); | |
130 | 127 |
131 EXPECT_TRUE(message_was_handled); | 128 EXPECT_TRUE(message_was_handled); |
132 EXPECT_EQ(orientation, provider_->orientation()); | 129 EXPECT_EQ(orientation, provider_->orientation()); |
133 } | 130 } |
134 } | 131 } |
135 | 132 |
136 // Test that when receiving an unlock message, it is correctly dispatched to the | 133 // Test that when receiving an unlock message, it is correctly dispatched to the |
137 // ScreenOrientationProvider. | 134 // ScreenOrientationProvider. |
138 TEST_F(ScreenOrientationDispatcherHostTest, ProviderUnlock) { | 135 TEST_F(ScreenOrientationDispatcherHostTest, ProviderUnlock) { |
139 bool message_was_handled = dispatcher_->OnMessageReceived( | 136 bool message_was_handled = dispatcher_->OnMessageReceived( |
140 ScreenOrientationHostMsg_Unlock(routing_id()), NULL); | 137 ScreenOrientationHostMsg_Unlock()); |
141 | 138 |
142 EXPECT_TRUE(message_was_handled); | 139 EXPECT_TRUE(message_was_handled); |
143 EXPECT_TRUE(provider_->unlock_called()); | 140 EXPECT_TRUE(provider_->unlock_called()); |
144 } | 141 } |
145 | 142 |
146 // Test that when there is no provider, a LockRequest fails with the appropriate | 143 // Test that when there is no provider, a LockRequest fails with the appropriate |
147 // ErrorType. | 144 // ErrorType. |
148 TEST_F(ScreenOrientationDispatcherHostWithSinkTest, NoProvider_LockError) { | 145 TEST_F(ScreenOrientationDispatcherHostWithSinkTest, NoProvider_LockError) { |
149 dispatcher_->SetProviderForTests(NULL); | 146 dispatcher_->SetProviderForTests(NULL); |
150 | 147 |
151 const int request_id = 3; | 148 const int request_id = 3; |
152 dispatcher_->OnMessageReceived(ScreenOrientationHostMsg_LockRequest( | 149 dispatcher_->OnMessageReceived(ScreenOrientationHostMsg_LockRequest( |
153 routing_id(), | 150 blink::WebScreenOrientationLockPortraitPrimary, request_id)); |
154 blink::WebScreenOrientationLockPortraitPrimary, | |
155 request_id), NULL); | |
156 | 151 |
157 EXPECT_EQ(1u, sink().message_count()); | 152 EXPECT_EQ(1u, sink().message_count()); |
158 | 153 |
159 const IPC::Message* msg = sink().GetFirstMessageMatching( | 154 const IPC::Message* msg = sink().GetFirstMessageMatching( |
160 ScreenOrientationMsg_LockError::ID); | 155 ScreenOrientationMsg_LockError::ID); |
161 EXPECT_TRUE(msg != NULL); | 156 EXPECT_TRUE(msg != NULL); |
162 | 157 |
163 Tuple2<int, blink::WebLockOrientationCallback::ErrorType> params; | 158 Tuple2<int, blink::WebLockOrientationCallback::ErrorType> params; |
164 ScreenOrientationMsg_LockError::Read(msg, ¶ms); | 159 ScreenOrientationMsg_LockError::Read(msg, ¶ms); |
165 EXPECT_EQ(request_id, params.a); | 160 EXPECT_EQ(request_id, params.a); |
166 EXPECT_EQ(blink::WebLockOrientationCallback::ErrorTypeNotAvailable, params.b); | 161 EXPECT_EQ(blink::WebLockOrientationCallback::ErrorTypeNotAvailable, params.b); |
167 } | 162 } |
168 | 163 |
169 // Test that when there is a provider, we always send a success response back to | 164 // Test that when there is a provider, we always send a success response back to |
170 // the renderer. | 165 // the renderer. |
171 // TODO(mlamouri): we currently do not test the content of the message because | 166 // TODO(mlamouri): we currently do not test the content of the message because |
172 // it currently contains dummy values. | 167 // it currently contains dummy values. |
173 TEST_F(ScreenOrientationDispatcherHostWithSinkTest, WithProvider_LockSuccess) { | 168 TEST_F(ScreenOrientationDispatcherHostWithSinkTest, WithProvider_LockSuccess) { |
174 const int request_id = 42; | 169 const int request_id = 42; |
175 dispatcher_->OnMessageReceived(ScreenOrientationHostMsg_LockRequest( | 170 dispatcher_->OnMessageReceived(ScreenOrientationHostMsg_LockRequest( |
176 routing_id(), | 171 blink::WebScreenOrientationLockPortraitPrimary, request_id)); |
177 blink::WebScreenOrientationLockPortraitPrimary, | |
178 request_id), NULL); | |
179 | 172 |
180 EXPECT_EQ(1u, sink().message_count()); | 173 EXPECT_EQ(1u, sink().message_count()); |
181 | 174 |
182 const IPC::Message* msg = sink().GetFirstMessageMatching( | 175 const IPC::Message* msg = sink().GetFirstMessageMatching( |
183 ScreenOrientationMsg_LockSuccess::ID); | 176 ScreenOrientationMsg_LockSuccess::ID); |
184 EXPECT_TRUE(msg != NULL); | 177 EXPECT_TRUE(msg != NULL); |
185 | 178 |
186 Tuple3<int, unsigned, blink::WebScreenOrientationType> params; | 179 Tuple3<int, unsigned, blink::WebScreenOrientationType> params; |
187 ScreenOrientationMsg_LockSuccess::Read(msg, ¶ms); | 180 ScreenOrientationMsg_LockSuccess::Read(msg, ¶ms); |
188 EXPECT_EQ(request_id, params.a); | 181 EXPECT_EQ(request_id, params.a); |
189 } | 182 } |
190 | 183 |
191 } // namespace content | 184 } // namespace content |
OLD | NEW |