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

Unified Diff: chrome_frame/cfproxy_test.cc

Issue 9838102: Remove ChromeProxy and friends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/cfproxy_support.cc ('k') | chrome_frame/chrome_frame.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/cfproxy_test.cc
diff --git a/chrome_frame/cfproxy_test.cc b/chrome_frame/cfproxy_test.cc
deleted file mode 100644
index 338244a45037ad16329291a0667ce8a25463f0e2..0000000000000000000000000000000000000000
--- a/chrome_frame/cfproxy_test.cc
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright (c) 2012 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 <string>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/synchronization/waitable_event.h"
-#include "chrome/common/automation_messages.h"
-#include "chrome_frame/cfproxy_private.h"
-#include "chrome_frame/test/chrome_frame_test_utils.h"
-#include "chrome_frame/test/test_scrubber.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gmock_mutant.h"
-
-using testing::_;
-using testing::DoAll;
-using testing::NotNull;
-using testing::Return;
-using testing::StrictMock;
-using testing::InvokeWithoutArgs;
-using testing::WithoutArgs;
-using testing::CreateFunctor;
-using testing::StrEq;
-using testing::Eq;
-
-// There is not much to test here since CFProxy is pretty dumb.
-struct MockFactory : public ChromeProxyFactory {
- MOCK_METHOD0(CreateProxy, ChromeProxy*());
-};
-
-struct MockChromeProxyDelegate : public ChromeProxyDelegate {
- MOCK_METHOD1(OnMessageReceived, bool(const IPC::Message& message));
- MOCK_METHOD1(Connected, void(ChromeProxy* proxy));
- MOCK_METHOD2(PeerLost, void(ChromeProxy*, enum DisconnectReason reason));
- MOCK_METHOD0(Disconnected, void());
- MOCK_METHOD0(tab_handle, int());
-
- MOCK_METHOD5(Completed_CreateTab, void(bool success, HWND chrome_wnd,
- HWND tab_window, int tab_handle, int session_id));
- MOCK_METHOD5(Completed_ConnectToTab, void(bool success, HWND chrome_window,
- HWND tab_window, int tab_handle, int session_id));
- MOCK_METHOD2(Completed_Navigate, void(bool success,
- enum AutomationMsg_NavigationResponseValues res));
-
- // Network requests from Chrome.
- MOCK_METHOD2(Network_Start, void(int request_id,
- const AutomationURLRequest& request_info));
- MOCK_METHOD2(Network_Read, void(int request_id, int bytes_to_read));
- MOCK_METHOD2(Network_End, void(int request_id,
- const net::URLRequestStatus& s));
- MOCK_METHOD1(Network_DownloadInHost, void(int request_id));
- MOCK_METHOD2(GetCookies, void(const GURL& url, int cookie_id));
- MOCK_METHOD2(SetCookie, void(const GURL& url, const std::string& cookie));
-
- // Navigation progress notifications.
- MOCK_METHOD2(NavigationStateChanged, void(int flags,
- const NavigationInfo& nav_info));
- MOCK_METHOD1(UpdateTargetUrl, void(const std::wstring& url));
- MOCK_METHOD2(NavigationFailed, void(int error_code, const GURL& gurl));
- MOCK_METHOD1(DidNavigate, void(const NavigationInfo& navigation_info));
- MOCK_METHOD1(TabLoaded, void(const GURL& url));
-
- //
- MOCK_METHOD3(OpenURL, void(const GURL& url_to_open, const GURL& referrer,
- int open_disposition));
- MOCK_METHOD1(GoToHistoryOffset, void(int offset));
- MOCK_METHOD3(MessageToHost, void(const std::string& message,
- const std::string& origin, const std::string& target));
-
- // Misc. UI.
- MOCK_METHOD1(HandleAccelerator, void(const MSG& accel_message));
- MOCK_METHOD3(HandleContextMenu, void(HANDLE menu_handle, int align_flags,
- const MiniContextMenuParams& params));
- MOCK_METHOD1(TabbedOut, void(bool reverse));
-
- //
- MOCK_METHOD0(TabClosed, void());
- MOCK_METHOD1(AttachTab, void(const AttachExternalTabParams& attach_params));
-};
-
-struct MockSender : public IPC::Message::Sender {
- MOCK_METHOD1(Send, bool(IPC::Message* m));
-};
-
-struct MockCFProxyTraits : public CFProxyTraits {
- MOCK_METHOD2(DoCreateChannel, IPC::Message::Sender*(const std::string& id,
- IPC::Channel::Listener* l));
- MOCK_METHOD1(CloseChannel, void(IPC::Message::Sender* s));
- MOCK_METHOD1(LaunchApp, bool(const std::wstring& cmd_line));
-
- // Forward the CreateChannel to DoCreateChannel, but save the ipc_thread
- // and the listener (i.e. proxy implementation of Channel::Listener)
- virtual IPC::Message::Sender* CreateChannel(const std::string& id,
- IPC::Channel::Listener* l) {
- ipc_loop = MessageLoop::current();
- listener = l;
- return this->DoCreateChannel(id, l);
- }
-
- // Simulate some activity in the IPC thread.
- // You may find API_FIRE_XXXX macros (see below) handy instead.
- void FireConnect(base::TimeDelta t) {
- ASSERT_TRUE(ipc_loop != NULL);
- ipc_loop->PostDelayedTask(
- FROM_HERE, base::Bind(&IPC::Channel::Listener::OnChannelConnected,
- base::Unretained(listener), 0),
- t.InMilliseconds());
- }
-
- void FireError(base::TimeDelta t) {
- ASSERT_TRUE(ipc_loop != NULL);
- ipc_loop->PostDelayedTask(
- FROM_HERE, base::Bind(&IPC::Channel::Listener::OnChannelError,
- base::Unretained(listener)),
- t.InMilliseconds());
- }
-
- void FireMessage(const IPC::Message& m, base::TimeDelta t) {
- ASSERT_TRUE(ipc_loop != NULL);
- ipc_loop->PostDelayedTask(
- FROM_HERE,
- base::Bind(
- base::IgnoreResult(&IPC::Channel::Listener::OnMessageReceived),
- base::Unretained(listener), m),
- t.InMilliseconds());
- }
-
- MockCFProxyTraits() : ipc_loop(NULL) {}
- MockSender sender;
- private:
- MessageLoop* ipc_loop;
- IPC::Channel::Listener* listener;
-};
-
-// Handy macros when we want so simulate something on the IPC thread.
-#define API_FIRE_CONNECT(api, t) InvokeWithoutArgs(CreateFunctor(&api, \
- &MockCFProxyTraits::FireConnect, t))
-#define API_FIRE_ERROR(api, t) InvokeWithoutArgs(CreateFunctor(&api, \
- &MockCFProxyTraits::FireError, t))
-#define API_FIRE_MESSAGE(api, t) InvokeWithoutArgs(CreateFunctor(&api, \
- &MockCFProxyTraits::FireMessage, t))
-
-class ChromeProxyTest : public ::testing::Test {
- protected:
- virtual void SetUp() OVERRIDE {
- chrome_frame_test::OverrideDataDirectoryForThisTest(
- chrome_frame_test::GetProfilePath(L"").value());
- params_.profile = "Adam N. Epilinter";
- params_.timeout = base::TimeDelta::FromSeconds(4);
- }
-
- ProxyParams params_;
-};
-
-TEST_F(ChromeProxyTest, DelegateAddRemove) {
- StrictMock<MockCFProxyTraits> api;
- StrictMock<MockChromeProxyDelegate> delegate;
- StrictMock<MockFactory> factory; // to be destroyed before other mocks
- CFProxy* proxy = new CFProxy(&api);
-
- EXPECT_CALL(factory, CreateProxy()).WillOnce(Return(proxy));
- EXPECT_CALL(api, DoCreateChannel(_, proxy)).WillOnce(Return(&api.sender));
- EXPECT_CALL(api, LaunchApp(_)).WillOnce(Return(true));
- EXPECT_CALL(api, CloseChannel(&api.sender));
-
- EXPECT_CALL(delegate, tab_handle()).WillRepeatedly(Return(0));
- EXPECT_CALL(delegate, Disconnected());
-
- factory.GetProxy(&delegate, params_);
- factory.ReleaseProxy(&delegate, params_.profile);
-}
-
-// Not very useful test. Just for illustration. :)
-TEST_F(ChromeProxyTest, SharedProxy) {
- base::WaitableEvent done1(false, false);
- base::WaitableEvent done2(false, false);
- StrictMock<MockCFProxyTraits> api;
- StrictMock<MockChromeProxyDelegate> delegate1;
- StrictMock<MockChromeProxyDelegate> delegate2;
- StrictMock<MockFactory> factory;
- CFProxy* proxy = new CFProxy(&api);
-
- EXPECT_CALL(factory, CreateProxy()).WillOnce(Return(proxy));
- EXPECT_CALL(api, DoCreateChannel(_, proxy)).WillOnce(Return(&api.sender));
- EXPECT_CALL(api, LaunchApp(_)).WillOnce(DoAll(
- API_FIRE_CONNECT(api, base::TimeDelta::FromMilliseconds(150)),
- Return(true)));
- EXPECT_CALL(api, CloseChannel(&api.sender));
-
- EXPECT_CALL(delegate1, tab_handle()).WillRepeatedly(Return(0));
- EXPECT_CALL(delegate2, tab_handle()).WillRepeatedly(Return(0));
-
- EXPECT_CALL(delegate1, Connected(proxy))
- .WillOnce(InvokeWithoutArgs(&done1, &base::WaitableEvent::Signal));
- EXPECT_CALL(delegate2, Connected(proxy))
- .WillOnce(InvokeWithoutArgs(&done2, &base::WaitableEvent::Signal));
-
- factory.GetProxy(&delegate1, params_);
- params_.timeout = base::TimeDelta::FromSeconds(2);
- factory.GetProxy(&delegate2, params_);
-
- EXPECT_TRUE(done1.TimedWait(base::TimeDelta::FromSeconds(1)));
- EXPECT_TRUE(done2.TimedWait(base::TimeDelta::FromSeconds(1)));
-
- EXPECT_CALL(delegate2, Disconnected());
- EXPECT_CALL(delegate1, Disconnected());
-
- factory.ReleaseProxy(&delegate2, params_.profile);
- factory.ReleaseProxy(&delegate1, params_.profile);
-}
-
-TEST_F(ChromeProxyTest, LaunchTimeout) {
- base::WaitableEvent done(true, false);
- StrictMock<MockCFProxyTraits> api;
- StrictMock<MockChromeProxyDelegate> delegate;
- StrictMock<MockFactory> factory;
- CFProxy* proxy = new CFProxy(&api);
-
- EXPECT_CALL(delegate, tab_handle()).WillRepeatedly(Return(0));
- EXPECT_CALL(factory, CreateProxy()).WillOnce(Return(proxy));
- EXPECT_CALL(api, DoCreateChannel(_, proxy)).WillOnce(Return(&api.sender));
- EXPECT_CALL(api, LaunchApp(_)).WillOnce(Return(true));
- EXPECT_CALL(api, CloseChannel(&api.sender));
-
- EXPECT_CALL(delegate, PeerLost(_,
- ChromeProxyDelegate::CHROME_EXE_LAUNCH_TIMEOUT))
- .WillOnce(InvokeWithoutArgs(&done, &base::WaitableEvent::Signal));
- params_.timeout = base::TimeDelta::FromMilliseconds(300);
- factory.GetProxy(&delegate, params_);
- EXPECT_TRUE(done.TimedWait(base::TimeDelta::FromSeconds(1)));
-
- EXPECT_CALL(delegate, Disconnected());
- factory.ReleaseProxy(&delegate, params_.profile);
-}
-
-TEST_F(ChromeProxyTest, LaunchChrome) {
- base::WaitableEvent connected(false, false);
- StrictMock<MockChromeProxyDelegate> delegate;
- ChromeProxyFactory factory;
-
- params_.timeout = base::TimeDelta::FromSeconds(10);
-
- EXPECT_CALL(delegate, tab_handle()).WillRepeatedly(Return(0));
- EXPECT_CALL(delegate, Connected(NotNull()))
- .WillOnce(InvokeWithoutArgs(&connected, &base::WaitableEvent::Signal));
-
- factory.GetProxy(&delegate, params_);
- EXPECT_TRUE(connected.TimedWait(base::TimeDelta::FromSeconds(15)));
-
- EXPECT_CALL(delegate, Disconnected());
- factory.ReleaseProxy(&delegate, params_.profile);
-}
-
-// Test that a channel error results in Completed_XYZ(false, ) called if
-// the synchronious XYZ message has been sent.
-TEST_F(ChromeProxyTest, ChannelError) {
- base::WaitableEvent connected(false, false);
- StrictMock<MockCFProxyTraits> api;
- StrictMock<MockChromeProxyDelegate> delegate;
- StrictMock<MockFactory> factory;
- CFProxy* proxy = new CFProxy(&api);
-
- params_.timeout = base::TimeDelta::FromMilliseconds(300);
-
- testing::InSequence s;
-
- EXPECT_CALL(factory, CreateProxy()).WillOnce(Return(proxy));
- EXPECT_CALL(api, DoCreateChannel(_, proxy)).WillOnce(Return(&api.sender));
- EXPECT_CALL(api, LaunchApp(_)).WillOnce(DoAll(
- API_FIRE_CONNECT(api, base::TimeDelta::FromMilliseconds(10)),
- Return(true)));
- EXPECT_CALL(delegate, Connected(proxy))
- .WillOnce(DoAll(
- InvokeWithoutArgs(CreateFunctor(proxy, &ChromeProxy::ConnectTab,
- &delegate, HWND(6), 512)),
- InvokeWithoutArgs(&connected, &base::WaitableEvent::Signal)));
-
- EXPECT_CALL(api.sender, Send(_));
- EXPECT_CALL(delegate, Completed_ConnectToTab(false, _, _, _, _));
- EXPECT_CALL(api, CloseChannel(&api.sender));
- EXPECT_CALL(delegate, PeerLost(_, ChromeProxyDelegate::CHANNEL_ERROR));
-
- factory.GetProxy(&delegate, params_);
- EXPECT_TRUE(connected.TimedWait(base::TimeDelta::FromSeconds(15)));
- // Simulate a channel error.
- api.FireError(base::TimeDelta::FromMilliseconds(0));
-
- // Expectations when the Proxy is destroyed.
- EXPECT_CALL(delegate, tab_handle()).WillOnce(Return(0));
- EXPECT_CALL(delegate, Disconnected());
- factory.ReleaseProxy(&delegate, params_.profile);
-}
-///////////////////////////////////////////////////////////////////////////////
-namespace {
-template <typename M, typename A>
-inline IPC::Message* CreateReply(M* m, const A& a) {
- IPC::Message* r = IPC::SyncMessage::GenerateReply(m);
- if (r) {
- M::WriteReplyParams(r, a);
- }
- return r;
-}
-
-template <typename M, typename A, typename B>
-inline IPC::Message* CreateReply(M* m, const A& a, const B& b) {
- IPC::Message* r = IPC::SyncMessage::GenerateReply(m);
- if (r) {
- M::WriteReplyParams(r, a, b);
- }
- return r;
-}
-
-template <typename M, typename A, typename B, typename C>
-inline IPC::Message* CreateReply(M* m, const A& a, const B& b, const C& c) {
- IPC::Message* r = IPC::SyncMessage::GenerateReply(m);
- if (r) {
- M::WriteReplyParams(r, a, b, c);
- }
- return r;
-}
-
-template <typename M, typename A, typename B, typename C, typename D>
-inline IPC::Message* CreateReply(M* m, const A& a, const B& b, const C& c,
- const D& d) {
- IPC::Message* r = IPC::SyncMessage::GenerateReply(m);
- if (r) {
- M::WriteReplyParams(r, a, b, c, d);
- }
- return r;
-}} // namespace
-
-TEST(SyncMsgSender, Deserialize) {
- // Note the ipc thread is not actually needed, but we try to be close
- // to real-world conditions - that SyncMsgSender works from multiple threads.
- base::Thread ipc("ipc");
- ipc.StartWithOptions(base::Thread::Options(MessageLoop::TYPE_IO, 0));
-
- StrictMock<MockChromeProxyDelegate> d1;
- TabsMap tab2delegate;
- SyncMsgSender queue(&tab2delegate);
-
- const int kTabHandle = 6;
- const int kSessionId = 8;
-
- // Create a sync message and its reply.
- AutomationMsg_CreateExternalTab m(ExternalTabSettings(), 0, 0, 0, 0);
- scoped_ptr<IPC::Message> r(CreateReply(&m, (HWND)1, (HWND)2, kTabHandle,
- kSessionId));
-
- queue.QueueSyncMessage(&m, &d1, NULL);
-
- testing::InSequence s;
- EXPECT_CALL(d1, Completed_CreateTab(true, (HWND)1, (HWND)2, kTabHandle,
- kSessionId));
-
- // Execute replies in a worker thread.
- ipc.message_loop()->PostTask(
- FROM_HERE,
- base::Bind(base::IgnoreResult(&SyncMsgSender::OnReplyReceived),
- base::Unretained(&queue), r.get()));
- ipc.Stop();
-
- // Expect that tab 6 has been associated with the delegate.
- EXPECT_EQ(&d1, tab2delegate[6]);
-}
-
-TEST(SyncMsgSender, OnChannelClosed) {
- // TODO(stoyan): implement.
-}
« no previous file with comments | « chrome_frame/cfproxy_support.cc ('k') | chrome_frame/chrome_frame.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698