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

Unified Diff: chrome_frame/test/chrome_frame_automation_mock.h

Issue 218019: Initial import of the Chrome Frame codebase. Integration in chrome.gyp coming... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 11 years, 3 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/test/ChromeTab_UnitTests.vcproj ('k') | chrome_frame/test/chrome_frame_automation_mock.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/test/chrome_frame_automation_mock.h
===================================================================
--- chrome_frame/test/chrome_frame_automation_mock.h (revision 0)
+++ chrome_frame/test/chrome_frame_automation_mock.h (revision 0)
@@ -0,0 +1,208 @@
+// Copyright (c) 2006-2009 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.
+#ifndef CHROME_FRAME_TEST_CHROME_FRAME_AUTOMATION_MOCK_H_
+#define CHROME_FRAME_TEST_CHROME_FRAME_AUTOMATION_MOCK_H_
+
+#include <string>
+
+#include "base/file_path.h"
+#include "base/path_service.h"
+#include "chrome_frame/chrome_frame_automation.h"
+#include "chrome_frame/chrome_frame_plugin.h"
+#include "chrome_frame/test/http_server.h"
+
+template <typename T>
+class AutomationMockDelegate
+ : public CWindowImpl<T>,
+ public ChromeFramePlugin<T> {
+ public:
+ AutomationMockDelegate(MessageLoop* caller_message_loop,
+ int launch_timeout, bool perform_version_check,
+ const std::wstring& profile_name,
+ const std::wstring& extra_chrome_arguments, bool incognito)
+ : caller_message_loop_(caller_message_loop), is_connected_(false) {
+ test_server_.SetUp();
+ automation_client_.reset(new ChromeFrameAutomationClient);
+ automation_client_->Initialize(this, launch_timeout, perform_version_check,
+ profile_name, extra_chrome_arguments, incognito);
+ }
+ ~AutomationMockDelegate() {
+ if (automation_client_.get()) {
+ automation_client_->Uninitialize();
+ automation_client_.reset();
+ }
+ if (IsWindow())
+ DestroyWindow();
+
+ test_server_.TearDown();
+ }
+
+ // Navigate external tab to the specified url through automation
+ bool Navigate(const std::string& url) {
+ url_ = GURL(url);
+ return automation_client_->InitiateNavigation(url);
+ }
+
+ // Navigate the external to a 'file://' url for unit test files
+ bool NavigateRelativeFile(const std::wstring& file) {
+ FilePath cf_source_path;
+ PathService::Get(base::DIR_SOURCE_ROOT, &cf_source_path);
+ std::wstring file_url(L"file://");
+ file_url.append(cf_source_path.Append(
+ FILE_PATH_LITERAL("chrome_frame")).Append(
+ FILE_PATH_LITERAL("test")).Append(
+ FILE_PATH_LITERAL("data")).Append(file).value());
+ return Navigate(WideToUTF8(file_url));
+ }
+
+ bool NavigateRelative(const std::wstring& relative_url) {
+ return Navigate(test_server_.Resolve(relative_url.c_str()).spec());
+ }
+
+ virtual void OnAutomationServerReady() {
+ if (automation_client_.get()) {
+ Create(NULL, 0, NULL, WS_OVERLAPPEDWINDOW);
+ DCHECK(IsWindow());
+ is_connected_ = true;
+ } else {
+ NOTREACHED();
+ }
+ }
+
+ virtual void OnAutomationServerLaunchFailed() {
+ QuitMessageLoop();
+ }
+
+ virtual void OnLoad(int tab_handle, const GURL& url) {
+ if (url_ == url) {
+ navigation_result_ = true;
+ } else {
+ QuitMessageLoop();
+ }
+ }
+
+ virtual void OnLoadFailed(int error_code, const std::string& url) {
+ QuitMessageLoop();
+ }
+
+ ChromeFrameAutomationClient* automation() {
+ return automation_client_.get();
+ }
+ const GURL& url() const {
+ return url_;
+ }
+ bool is_connected() const {
+ return is_connected_;
+ }
+ bool navigation_result() const {
+ return navigation_result_;
+ }
+
+ BEGIN_MSG_MAP(AutomationMockDelegate)
+ END_MSG_MAP()
+
+ protected:
+ void QuitMessageLoop() {
+ // Quit on the caller message loop has to be called on the caller
+ // thread.
+ caller_message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask);
+ }
+
+ private:
+ ChromeFrameHTTPServer test_server_;
+ MessageLoop* caller_message_loop_;
+ GURL url_;
+ bool is_connected_;
+ bool navigation_result_;
+};
+
+class AutomationMockLaunch
+ : public AutomationMockDelegate<AutomationMockLaunch> {
+ public:
+ typedef AutomationMockDelegate<AutomationMockLaunch> Base;
+ AutomationMockLaunch(MessageLoop* caller_message_loop,
+ int launch_timeout)
+ : Base(caller_message_loop, launch_timeout, true, L"", L"", false) {
+ }
+ virtual void OnAutomationServerReady() {
+ Base::OnAutomationServerReady();
+ QuitMessageLoop();
+ }
+ bool launch_result() const {
+ return is_connected();
+ }
+};
+
+class AutomationMockNavigate
+ : public AutomationMockDelegate<AutomationMockNavigate> {
+ public:
+ typedef AutomationMockDelegate<AutomationMockNavigate> Base;
+ AutomationMockNavigate(MessageLoop* caller_message_loop,
+ int launch_timeout)
+ : Base(caller_message_loop, launch_timeout, true, L"", L"", false) {
+ }
+ virtual void OnLoad(int tab_handle, const GURL& url) {
+ Base::OnLoad(tab_handle, url);
+ QuitMessageLoop();
+ }
+};
+
+class AutomationMockPostMessage
+ : public AutomationMockDelegate<AutomationMockPostMessage> {
+ public:
+ typedef AutomationMockDelegate<AutomationMockPostMessage> Base;
+ AutomationMockPostMessage(MessageLoop* caller_message_loop,
+ int launch_timeout)
+ : Base(caller_message_loop, launch_timeout, true, L"", L"", false),
+ postmessage_result_(false) {}
+ bool postmessage_result() const {
+ return postmessage_result_;
+ }
+ virtual void OnLoad(int tab_handle, const GURL& url) {
+ Base::OnLoad(tab_handle, url);
+ if (navigation_result()) {
+ automation()->ForwardMessageFromExternalHost("Test", "null", "*");
+ }
+ }
+ virtual void OnMessageFromChromeFrame(int tab_handle,
+ const std::string& message,
+ const std::string& origin,
+ const std::string& target) {
+ postmessage_result_ = true;
+ QuitMessageLoop();
+ }
+ private:
+ bool postmessage_result_;
+};
+
+class AutomationMockHostNetworkRequestStart
+ : public AutomationMockDelegate<AutomationMockHostNetworkRequestStart> {
+ public:
+ typedef AutomationMockDelegate<AutomationMockHostNetworkRequestStart> Base;
+ AutomationMockHostNetworkRequestStart(MessageLoop* caller_message_loop,
+ int launch_timeout)
+ : Base(caller_message_loop, launch_timeout, true, L"", L"", false),
+ request_start_result_(false) {
+ if (automation()) {
+ automation()->set_use_chrome_network(false);
+ }
+ }
+ bool request_start_result() const {
+ return request_start_result_;
+ }
+ virtual void OnRequestStart(int tab_handle, int request_id,
+ const IPC::AutomationURLRequest& request) {
+ request_start_result_ = true;
+ QuitMessageLoop();
+ }
+ virtual void OnLoad(int tab_handle, const GURL& url) {
+ Base::OnLoad(tab_handle, url);
+ }
+ private:
+ bool request_start_result_;
+};
+
+
+#endif // CHROME_FRAME_TEST_CHROME_FRAME_AUTOMATION_MOCK_H_
+
« no previous file with comments | « chrome_frame/test/ChromeTab_UnitTests.vcproj ('k') | chrome_frame/test/chrome_frame_automation_mock.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698