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

Side by Side Diff: blimp/engine/browser/host_render_widget_message_processor_unittest.cc

Issue 1450423002: Add glue between the client and engine for Blimp (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blimp_ipc2
Patch Set: Made the BlackHoleBlimpMessageProcessor official! Created 5 years, 1 month 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
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 "blimp/engine/browser/host_render_widget_message_processor.h"
6
7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "blimp/common/proto/blimp_message.pb.h"
10 #include "blimp/common/proto/compositor.pb.h"
11 #include "blimp/common/proto/render_widget.pb.h"
12 #include "blimp/net/input_message_generator.h"
13 #include "net/base/net_errors.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/WebKit/public/web/WebInputEvent.h"
17
18 using testing::_;
19 using testing::InvokeArgument;
20 using testing::Ref;
21 using testing::Return;
22 using testing::SaveArg;
23
24 namespace blimp {
25
26 namespace {
27 class MockBlimpMessageProcessor : public BlimpMessageProcessor {
28 public:
29 MockBlimpMessageProcessor() {}
30
31 ~MockBlimpMessageProcessor() override {}
32
33 // Adapts calls from ProcessMessage to MockableProcessMessage by
34 // unboxing the |message| scoped_ptr for GMock compatibility.
35 void ProcessMessage(scoped_ptr<BlimpMessage> message,
36 const net::CompletionCallback& callback) {
37 MockableProcessMessage(*message);
38 if (!callback.is_null())
39 callback.Run(net::OK);
40 }
41
42 MOCK_METHOD1(MockableProcessMessage,
43 void(const BlimpMessage& message));
44 };
45
46 class MockHostRenderWidgetMessageDelegate
47 : public HostRenderWidgetMessageProcessor::RenderWidgetMessageDelegate {
48 public:
49 // HostRenderWidgetMessageProcessor implementation.
50 void OnWebInputEvent(scoped_ptr<blink::WebInputEvent> event) override {
51 MockableOnWebInputEvent();
52 }
53
54 void OnCompositorMessageReceived(
55 const std::vector<uint8_t>& message) override {
56 MockableOnCompositorMessageReceived();
57 }
58
59 MOCK_METHOD0(MockableOnWebInputEvent, void());
60 MOCK_METHOD0(MockableOnCompositorMessageReceived, void());
61 };
62
63 MATCHER_P2(RenderWidgetMessageEquals, tab_id, rw_id, "") {
64 return arg.render_widget().render_widget_id() == rw_id &&
65 arg.target_tab_id() == tab_id;
66 }
67
68 MATCHER_P2(CompositorMessageEquals, tab_id, rw_id, "") {
69 return arg.compositor().render_widget_id() == rw_id &&
70 arg.target_tab_id() == tab_id;
71 }
72
73 void SendInputMessage(BlimpMessageProcessor* processor,
74 int tab_id,
75 uint32_t rw_id) {
76 scoped_ptr<BlimpMessage> message(new BlimpMessage);
77 message->set_type(BlimpMessage::INPUT);
78 message->set_target_tab_id(tab_id);
79
80 InputMessage* details = message->mutable_input();
81 details->set_render_widget_id(rw_id);
82
83 blink::WebGestureEvent input_event;
84 input_event.type = blink::WebInputEvent::Type::GestureTap;
85 InputMessageGenerator generator;
86 generator.GenerateMessage(&input_event, details);
87
88 processor->ProcessMessage(message.Pass(),
89 net::CompletionCallback());
90 }
91
92 void SendCompositorMessage(BlimpMessageProcessor* processor,
93 int tab_id,
94 uint32_t rw_id) {
95 scoped_ptr<BlimpMessage> message(new BlimpMessage);
96 message->set_type(BlimpMessage::COMPOSITOR);
97 message->set_target_tab_id(tab_id);
98
99 CompositorMessage* details = message->mutable_compositor();
100 details->set_render_widget_id(rw_id);
101 processor->ProcessMessage(message.Pass(),
102 net::CompletionCallback());
103 }
104
105 } // namespace
106
107 class HostRenderWidgetMessageProcessorTest : public testing::Test {
108 public:
109 HostRenderWidgetMessageProcessorTest()
110 : processor_(&out_processor_) {}
111
112 void SetUp() override {
113 processor_.SetDelegate(1, &delegate1_);
114 processor_.SetDelegate(2, &delegate2_);
115
116 processor_.OnRenderWidgetInitialized(1);
117 processor_.OnRenderWidgetInitialized(2);
118 }
119
120 protected:
121 MockBlimpMessageProcessor out_processor_;
122 MockHostRenderWidgetMessageDelegate delegate1_;
123 MockHostRenderWidgetMessageDelegate delegate2_;
124 HostRenderWidgetMessageProcessor processor_;
125 };
126
127 TEST_F(HostRenderWidgetMessageProcessorTest, DelegateCallsOK) {
128 EXPECT_CALL(delegate1_, MockableOnCompositorMessageReceived()).Times(1);
129 SendCompositorMessage(&processor_, 1, 1U);
130
131 EXPECT_CALL(delegate1_, MockableOnWebInputEvent()).Times(1);
132 SendInputMessage(&processor_, 1, 1U);
133
134 EXPECT_CALL(delegate2_, MockableOnCompositorMessageReceived()).Times(1);
135 SendCompositorMessage(&processor_, 2, 1U);
136
137 EXPECT_CALL(delegate2_, MockableOnWebInputEvent()).Times(1);
138 SendInputMessage(&processor_, 2, 1U);
139 }
140
141 TEST_F(HostRenderWidgetMessageProcessorTest, DropsStaleMessages) {
142 EXPECT_CALL(delegate1_, MockableOnCompositorMessageReceived()).Times(1);
143 SendCompositorMessage(&processor_, 1, 1U);
144
145 EXPECT_CALL(out_processor_,
146 MockableProcessMessage(RenderWidgetMessageEquals(1, 2U)))
147 .Times(1);
148 processor_.OnRenderWidgetInitialized(1);
149
150 EXPECT_CALL(delegate1_, MockableOnCompositorMessageReceived()).Times(0);
151 SendCompositorMessage(&processor_, 1, 1U);
152
153 EXPECT_CALL(delegate1_, MockableOnWebInputEvent()).Times(0);
154 SendInputMessage(&processor_, 1, 1U);
155
156 EXPECT_CALL(delegate1_, MockableOnCompositorMessageReceived()).Times(1);
157 SendCompositorMessage(&processor_, 1, 2U);
158
159 EXPECT_CALL(delegate1_, MockableOnWebInputEvent()).Times(1);
160 SendInputMessage(&processor_, 1, 2U);
161 }
162
163 TEST_F(HostRenderWidgetMessageProcessorTest, RepliesHaveCorrectRenderWidgetId) {
164 EXPECT_CALL(out_processor_,
165 MockableProcessMessage(RenderWidgetMessageEquals(1, 2U)))
166 .Times(1);
167 processor_.OnRenderWidgetInitialized(1);
168
169 EXPECT_CALL(out_processor_,
170 MockableProcessMessage(RenderWidgetMessageEquals(2, 2U)))
171 .Times(1);
172 processor_.OnRenderWidgetInitialized(2);
173
174 EXPECT_CALL(out_processor_,
175 MockableProcessMessage(CompositorMessageEquals(1, 2U))).Times(1);
176 processor_.SendCompositorMessage(1, std::vector<uint8_t>());
177 }
178
179
180 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698