| Index: blimp/engine/feature/engine_render_widget_feature_unittest.cc
|
| diff --git a/blimp/engine/feature/engine_render_widget_feature_unittest.cc b/blimp/engine/feature/engine_render_widget_feature_unittest.cc
|
| deleted file mode 100644
|
| index 9f8ed87edfa01a6067ebd60d23795a24f2d177a5..0000000000000000000000000000000000000000
|
| --- a/blimp/engine/feature/engine_render_widget_feature_unittest.cc
|
| +++ /dev/null
|
| @@ -1,350 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "blimp/engine/feature/engine_render_widget_feature.h"
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/numerics/safe_conversions.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "blimp/common/create_blimp_message.h"
|
| -#include "blimp/common/proto/blimp_message.pb.h"
|
| -#include "blimp/common/proto/compositor.pb.h"
|
| -#include "blimp/common/proto/render_widget.pb.h"
|
| -#include "blimp/net/input_message_generator.h"
|
| -#include "blimp/net/test_common.h"
|
| -#include "content/public/browser/render_widget_host.h"
|
| -#include "content/public/common/form_field_data.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/base/test_completion_callback.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "third_party/WebKit/public/platform/WebInputEvent.h"
|
| -#include "ui/base/ime/dummy_text_input_client.h"
|
| -
|
| -using testing::_;
|
| -using testing::InSequence;
|
| -using testing::Sequence;
|
| -
|
| -namespace blimp {
|
| -namespace engine {
|
| -
|
| -namespace {
|
| -
|
| -class MockHostRenderWidgetMessageDelegate
|
| - : public EngineRenderWidgetFeature::RenderWidgetMessageDelegate {
|
| - public:
|
| - // EngineRenderWidgetFeature implementation.
|
| - void OnWebGestureEvent(
|
| - content::RenderWidgetHost* render_widget_host,
|
| - std::unique_ptr<blink::WebGestureEvent> event) override {
|
| - MockableOnWebGestureEvent(render_widget_host);
|
| - }
|
| -
|
| - void OnCompositorMessageReceived(
|
| - content::RenderWidgetHost* render_widget_host,
|
| - const std::vector<uint8_t>& message) override {
|
| - MockableOnCompositorMessageReceived(render_widget_host, message);
|
| - }
|
| -
|
| - MOCK_METHOD1(MockableOnWebGestureEvent,
|
| - void(content::RenderWidgetHost* render_widget_host));
|
| - MOCK_METHOD2(MockableOnCompositorMessageReceived,
|
| - void(content::RenderWidgetHost* render_widget_host,
|
| - const std::vector<uint8_t>& message));
|
| -};
|
| -
|
| -class MockRenderWidgetHost
|
| - : public content::RenderWidgetHost {
|
| - public:
|
| - MockRenderWidgetHost() {}
|
| - ~MockRenderWidgetHost() override {}
|
| - void UpdateTextDirection(blink::WebTextDirection direction) override {}
|
| - void NotifyTextDirection() override {}
|
| - void Focus() override {}
|
| - void Blur() override {}
|
| - void SetActive(bool active) override {}
|
| - void CopyFromBackingStore(const gfx::Rect& src_rect,
|
| - const gfx::Size& accelerated_dst_size,
|
| - const content::ReadbackRequestCallback& callback,
|
| - const SkColorType color_type) override {}
|
| - bool CanCopyFromBackingStore() override { return false; }
|
| - void LockBackingStore() override {}
|
| - void UnlockBackingStore() override {}
|
| - void ForwardMouseEvent(
|
| - const blink::WebMouseEvent& mouse_event) override {}
|
| - void ForwardWheelEvent(
|
| - const blink::WebMouseWheelEvent& wheel_event) override {}
|
| - void ForwardKeyboardEvent(
|
| - const content::NativeWebKeyboardEvent& key_event) override {}
|
| - void ForwardGestureEvent(
|
| - const blink::WebGestureEvent& gesture_event) override {}
|
| - content::RenderProcessHost* GetProcess() const override { return nullptr; }
|
| - int GetRoutingID() const override { return 0; }
|
| - content::RenderWidgetHostView* GetView() const override { return nullptr; }
|
| - bool IsLoading() const override { return false; }
|
| - void RestartHangMonitorTimeoutIfNecessary() override {}
|
| - void DisableHangMonitorForTesting() override {}
|
| - void SetIgnoreInputEvents(bool ignore_input_events) override {}
|
| - void WasResized() override {}
|
| - void AddKeyPressEventCallback(
|
| - const KeyPressEventCallback& callback) override {}
|
| - void RemoveKeyPressEventCallback(
|
| - const KeyPressEventCallback& callback) override {}
|
| - void AddMouseEventCallback(const MouseEventCallback& callback) override {}
|
| - void RemoveMouseEventCallback(const MouseEventCallback& callback) override {}
|
| - void AddInputEventObserver(InputEventObserver* observer) override {}
|
| - void RemoveInputEventObserver(InputEventObserver* observer) override {}
|
| - void GetScreenInfo(content::ScreenInfo* result) override {}
|
| - void HandleCompositorProto(const std::vector<uint8_t>& proto) override {}
|
| -
|
| - bool Send(IPC::Message* msg) override { return false; }
|
| -};
|
| -
|
| -class MockTextInputClient : public ui::DummyTextInputClient {
|
| - public:
|
| - MockTextInputClient() : DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT) {}
|
| -
|
| - bool GetTextFromRange(const gfx::Range& range,
|
| - base::string16* text) const override {
|
| - *text = base::string16(base::ASCIIToUTF16("green apple"));
|
| - return false;
|
| - }
|
| -};
|
| -
|
| -MATCHER_P(CompMsgEquals, contents, "") {
|
| - if (contents.size() != arg.size())
|
| - return false;
|
| -
|
| - return memcmp(contents.data(), arg.data(), contents.size()) == 0;
|
| -}
|
| -
|
| -MATCHER_P3(BlimpCompMsgEquals, tab_id, rw_id, contents, "") {
|
| - if (contents.size() != arg.compositor().payload().size())
|
| - return false;
|
| -
|
| - if (memcmp(contents.data(),
|
| - arg.compositor().payload().data(),
|
| - contents.size()) != 0) {
|
| - return false;
|
| - }
|
| -
|
| - return arg.compositor().render_widget_id() == rw_id &&
|
| - arg.target_tab_id() == tab_id;
|
| -}
|
| -
|
| -MATCHER_P3(BlimpRWMsgEquals, tab_id, rw_id, message_type, "") {
|
| - return arg.render_widget().render_widget_id() == rw_id &&
|
| - arg.target_tab_id() == tab_id &&
|
| - arg.render_widget().type() == message_type;
|
| -}
|
| -
|
| -MATCHER_P2(BlimpImeMsgEquals, tab_id, message_type, "") {
|
| - return arg.target_tab_id() == tab_id && arg.ime().type() == message_type;
|
| -}
|
| -
|
| -MATCHER_P5(BlimpImeMsgEquals,
|
| - tab_id,
|
| - rwid,
|
| - message_type,
|
| - text,
|
| - text_input_type,
|
| - "") {
|
| - return arg.target_tab_id() == tab_id &&
|
| - arg.ime().render_widget_id() == rwid &&
|
| - arg.ime().type() == message_type &&
|
| - arg.ime().ime_text().compare(text) == 0 &&
|
| - arg.ime().text_input_type() == text_input_type;
|
| -}
|
| -
|
| -void SendInputMessage(BlimpMessageProcessor* processor,
|
| - int tab_id,
|
| - int rw_id) {
|
| - blink::WebGestureEvent input_event(blink::WebGestureEvent::Type::GestureTap,
|
| - blink::WebInputEvent::NoModifiers,
|
| - blink::WebInputEvent::TimeStampForTesting);
|
| -
|
| - InputMessageGenerator generator;
|
| - std::unique_ptr<BlimpMessage> message =
|
| - generator.GenerateMessage(input_event);
|
| - message->set_target_tab_id(tab_id);
|
| - message->mutable_input()->set_render_widget_id(rw_id);
|
| -
|
| - net::TestCompletionCallback cb;
|
| - processor->ProcessMessage(std::move(message), cb.callback());
|
| - EXPECT_EQ(net::OK, cb.WaitForResult());
|
| -}
|
| -
|
| -void SendCompositorMessage(BlimpMessageProcessor* processor,
|
| - int tab_id,
|
| - int rw_id,
|
| - const std::vector<uint8_t>& payload) {
|
| - CompositorMessage* details;
|
| - std::unique_ptr<BlimpMessage> message = CreateBlimpMessage(&details, tab_id);
|
| - details->set_render_widget_id(rw_id);
|
| - details->set_payload(payload.data(), base::checked_cast<int>(payload.size()));
|
| - net::TestCompletionCallback cb;
|
| - processor->ProcessMessage(std::move(message), cb.callback());
|
| - EXPECT_EQ(net::OK, cb.WaitForResult());
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class EngineRenderWidgetFeatureTest : public testing::Test {
|
| - public:
|
| - EngineRenderWidgetFeatureTest() : feature_(&settings_) {}
|
| -
|
| - void SetUp() override {
|
| - render_widget_message_sender_ = new MockBlimpMessageProcessor;
|
| - feature_.set_render_widget_message_sender(
|
| - base::WrapUnique(render_widget_message_sender_));
|
| - compositor_message_sender_ = new MockBlimpMessageProcessor;
|
| - feature_.set_compositor_message_sender(
|
| - base::WrapUnique(compositor_message_sender_));
|
| - ime_message_sender_ = new MockBlimpMessageProcessor;
|
| - feature_.set_ime_message_sender(base::WrapUnique(ime_message_sender_));
|
| - feature_.SetDelegate(1, &delegate1_);
|
| - feature_.SetDelegate(2, &delegate2_);
|
| - }
|
| -
|
| - protected:
|
| - MockBlimpMessageProcessor* render_widget_message_sender_;
|
| - MockBlimpMessageProcessor* compositor_message_sender_;
|
| - MockBlimpMessageProcessor* ime_message_sender_;
|
| - MockRenderWidgetHost render_widget_host1_;
|
| - MockRenderWidgetHost render_widget_host2_;
|
| - MockHostRenderWidgetMessageDelegate delegate1_;
|
| - MockHostRenderWidgetMessageDelegate delegate2_;
|
| - MockTextInputClient text_input_client_;
|
| - SettingsManager settings_;
|
| - EngineRenderWidgetFeature feature_;
|
| -};
|
| -
|
| -TEST_F(EngineRenderWidgetFeatureTest, DelegateCallsOK) {
|
| - std::vector<uint8_t> payload = { 'd', 'a', 'v', 'i', 'd' };
|
| -
|
| - EXPECT_CALL(*render_widget_message_sender_, MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 1, RenderWidgetMessage::CREATED), _))
|
| - .Times(1);
|
| - EXPECT_CALL(*render_widget_message_sender_, MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 1, RenderWidgetMessage::INITIALIZE), _))
|
| - .Times(1);
|
| - EXPECT_CALL(*render_widget_message_sender_, MockableProcessMessage(
|
| - BlimpRWMsgEquals(2, 2, RenderWidgetMessage::CREATED), _))
|
| - .Times(1);
|
| -
|
| - EXPECT_CALL(delegate1_,
|
| - MockableOnCompositorMessageReceived(&render_widget_host1_,
|
| - CompMsgEquals(payload)))
|
| - .Times(1);
|
| - EXPECT_CALL(delegate1_, MockableOnWebGestureEvent(&render_widget_host1_))
|
| - .Times(1);
|
| - EXPECT_CALL(delegate2_,
|
| - MockableOnCompositorMessageReceived(&render_widget_host2_,
|
| - CompMsgEquals(payload)))
|
| - .Times(1);
|
| -
|
| - feature_.OnRenderWidgetCreated(1, &render_widget_host1_);
|
| - feature_.OnRenderWidgetInitialized(1, &render_widget_host1_);
|
| - feature_.OnRenderWidgetCreated(2, &render_widget_host2_);
|
| - SendCompositorMessage(&feature_, 1, 1, payload);
|
| - SendInputMessage(&feature_, 1, 1);
|
| - SendCompositorMessage(&feature_, 2, 2, payload);
|
| -}
|
| -
|
| -TEST_F(EngineRenderWidgetFeatureTest, ImeRequestSentCorrectly) {
|
| - EXPECT_CALL(
|
| - *ime_message_sender_,
|
| - MockableProcessMessage(BlimpImeMsgEquals(2, 1, ImeMessage::SHOW_IME,
|
| - std::string("green apple"), 1),
|
| - _));
|
| -
|
| - EXPECT_CALL(
|
| - *ime_message_sender_,
|
| - MockableProcessMessage(BlimpImeMsgEquals(2, ImeMessage::HIDE_IME), _));
|
| -
|
| - content::FormFieldData field;
|
| - field.text = "green apple";
|
| - field.placeholder = "fruit name";
|
| - field.text_input_type = ui::TEXT_INPUT_TYPE_TEXT;
|
| -
|
| - feature_.OnRenderWidgetCreated(2, &render_widget_host1_);
|
| - feature_.SendShowImeRequest(2, &render_widget_host1_, field);
|
| - feature_.SendHideImeRequest(2, &render_widget_host1_);
|
| -}
|
| -
|
| -TEST_F(EngineRenderWidgetFeatureTest, DropsStaleMessages) {
|
| - InSequence sequence;
|
| - std::vector<uint8_t> payload = { 'f', 'u', 'n' };
|
| - std::vector<uint8_t> new_payload = {'n', 'o', ' ', 'f', 'u', 'n'};
|
| -
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 1, RenderWidgetMessage::CREATED), _));
|
| - EXPECT_CALL(delegate1_,
|
| - MockableOnCompositorMessageReceived(&render_widget_host1_,
|
| - CompMsgEquals(payload)));
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 1, RenderWidgetMessage::DELETED), _));
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 2, RenderWidgetMessage::CREATED), _));
|
| -
|
| - EXPECT_CALL(delegate1_,
|
| - MockableOnCompositorMessageReceived(&render_widget_host2_,
|
| - CompMsgEquals(new_payload)));
|
| - EXPECT_CALL(delegate1_, MockableOnWebGestureEvent(&render_widget_host2_));
|
| -
|
| - feature_.OnRenderWidgetCreated(1, &render_widget_host1_);
|
| - SendCompositorMessage(&feature_, 1, 1, payload);
|
| - feature_.OnRenderWidgetDeleted(1, &render_widget_host1_);
|
| - feature_.OnRenderWidgetCreated(1, &render_widget_host2_);
|
| -
|
| - // These next three calls should be dropped.
|
| - SendCompositorMessage(&feature_, 1, 1, payload);
|
| - SendCompositorMessage(&feature_, 1, 1, payload);
|
| - SendInputMessage(&feature_, 1, 1);
|
| -
|
| - SendCompositorMessage(&feature_, 1, 2, new_payload);
|
| - SendInputMessage(&feature_, 1, 2);
|
| -}
|
| -
|
| -TEST_F(EngineRenderWidgetFeatureTest, RepliesHaveCorrectRenderWidgetId) {
|
| - Sequence delegate1_sequence;
|
| - Sequence delegate2_sequence;
|
| - std::vector<uint8_t> payload = { 'a', 'b', 'c', 'd' };
|
| -
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 1, RenderWidgetMessage::CREATED), _))
|
| - .InSequence(delegate1_sequence);
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(1, 1, RenderWidgetMessage::INITIALIZE), _))
|
| - .InSequence(delegate1_sequence);
|
| - EXPECT_CALL(*compositor_message_sender_,
|
| - MockableProcessMessage(BlimpCompMsgEquals(1, 1, payload), _))
|
| - .InSequence(delegate1_sequence);
|
| -
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(2, 2, RenderWidgetMessage::CREATED), _))
|
| - .InSequence(delegate2_sequence);
|
| - EXPECT_CALL(*render_widget_message_sender_,
|
| - MockableProcessMessage(
|
| - BlimpRWMsgEquals(2, 2, RenderWidgetMessage::DELETED), _))
|
| - .InSequence(delegate2_sequence);
|
| -
|
| - feature_.OnRenderWidgetCreated(1, &render_widget_host1_);
|
| - feature_.OnRenderWidgetCreated(2, &render_widget_host2_);
|
| - feature_.OnRenderWidgetInitialized(1, &render_widget_host1_);
|
| - feature_.OnRenderWidgetDeleted(2, &render_widget_host2_);
|
| - feature_.SendCompositorMessage(1, &render_widget_host1_, payload);
|
| -}
|
| -
|
| -} // namespace engine
|
| -} // namespace blimp
|
|
|