15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_FRAME_TEST_CHROME_FRAME_AUTOMATION_MOCK_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_FRAME_TEST_CHROME_FRAME_AUTOMATION_MOCK_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/test_process_killer_win.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/chrome_frame_automation.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/chrome_frame_plugin.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/navigation_constraints.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/test_scrubber.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/test_with_web_server.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/utils.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T> 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutomationMockDelegate 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public CWindowImpl<T>, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ChromeFramePlugin<T> { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomationMockDelegate(base::MessageLoop* caller_message_loop, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int launch_timeout, bool perform_version_check, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& profile_name, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& language, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito, bool is_widget_mode) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : caller_message_loop_(caller_message_loop), is_connected_(false), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_result_(false), 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_server_(1337, L"127.0.0.1", 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::GetTestDataFolder()) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Endeavour to only kill off Chrome Frame derived Chrome processes. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::KillAllNamedProcessesWithArgument( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF8ToWide(chrome_frame_test::kChromeImageName), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF8ToWide(switches::kChromeFrame)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_server_.ExpectAndServeAnyRequests(CFInvocation(CFInvocation::NONE)); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetChromeFrameProfilePath(profile_name, &profile_path); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_frame_test::OverrideDataDirectoryForThisTest(profile_path.value()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) automation_client_ = new ChromeFrameAutomationClient; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL empty; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ChromeFrameLaunchParams> clp( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ChromeFrameLaunchParams(empty, empty, profile_path, profile_name, 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) language, incognito, is_widget_mode, false)); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clp->set_launch_timeout(launch_timeout); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clp->set_version_check(perform_version_check); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) automation_client_->Initialize(this, clp); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AutomationMockDelegate() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (automation_client_.get()) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) automation_client_->Uninitialize(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) automation_client_ = NULL; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWindow()) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DestroyWindow(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate external tab to the specified url through automation 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Navigate(const std::string& url) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationConstraintsImpl navigation_constraints; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_ = GURL(url); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = automation_client_->InitiateNavigation( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, std::string(), &navigation_constraints); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnLoadFailed(0, url); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate the external to a 'file://' url for unit test files 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool NavigateRelativeFile(const std::wstring& file) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath cf_source_path; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::DIR_SOURCE_ROOT, &cf_source_path); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring file_url(L"file://"); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_url.append(cf_source_path.Append( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("chrome_frame")).Append( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("test")).Append( 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("data")).Append(file).value()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Navigate(WideToUTF8(file_url)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool NavigateRelative(const std::wstring& relative_url) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Navigate(WideToUTF8(mock_server_.Resolve(relative_url.c_str()))); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAutomationServerReady() { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (automation_client_.get()) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Create(NULL, 0, NULL, WS_OVERLAPPEDWINDOW); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(IsWindow()); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_connected_ = true; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAutomationServerLaunchFailed() { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLoad(const GURL& url) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url_ == url) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_result_ = true; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLoadFailed(int error_code, const std::string& url) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigation_result_ = false; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeFrameAutomationClient* automation() { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return automation_client_.get(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url() const { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_connected() const { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_connected_; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool navigation_result() const { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return navigation_result_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BEGIN_MSG_MAP(AutomationMockDelegate) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_MSG_MAP() 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QuitMessageLoop() { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Quit on the caller message loop has to be called on the caller 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // thread. 140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) caller_message_loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::StrictMock<MockWebServer> mock_server_; 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop* caller_message_loop_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_connected_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool navigation_result_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutomationMockLaunch 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public AutomationMockDelegate<AutomationMockLaunch> { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef AutomationMockDelegate<AutomationMockLaunch> Base; 155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomationMockLaunch(base::MessageLoop* caller_message_loop, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int launch_timeout) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : Base(caller_message_loop, launch_timeout, true, L"", L"", false, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAutomationServerReady() { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Base::OnAutomationServerReady(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool launch_result() const { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_connected(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutomationMockNavigate 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public AutomationMockDelegate<AutomationMockNavigate> { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef AutomationMockDelegate<AutomationMockNavigate> Base; 173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomationMockNavigate(base::MessageLoop* caller_message_loop, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int launch_timeout) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : Base(caller_message_loop, launch_timeout, true, L"", L"", false, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false) { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLoad(const GURL& url) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Base::OnLoad(url); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutomationMockPostMessage 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public AutomationMockDelegate<AutomationMockPostMessage> { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef AutomationMockDelegate<AutomationMockPostMessage> Base; 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomationMockPostMessage(base::MessageLoop* caller_message_loop, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int launch_timeout) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : Base(caller_message_loop, launch_timeout, true, L"", L"", false, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false), 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) postmessage_result_(false) {} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool postmessage_result() const { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return postmessage_result_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLoad(const GURL& url) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Base::OnLoad(url); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (navigation_result()) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) automation()->ForwardMessageFromExternalHost("Test", "null", "*"); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnMessageFromChromeFrame(const std::string& message, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& origin, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& target) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) postmessage_result_ = true; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool postmessage_result_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutomationMockHostNetworkRequestStart 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public AutomationMockDelegate<AutomationMockHostNetworkRequestStart> { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef AutomationMockDelegate<AutomationMockHostNetworkRequestStart> Base; 216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AutomationMockHostNetworkRequestStart(base::MessageLoop* caller_message_loop, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int launch_timeout) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : Base(caller_message_loop, launch_timeout, true, L"", L"", false, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false), 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_start_result_(false) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (automation()) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) automation()->set_use_chrome_network(false); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool request_start_result() const { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return request_start_result_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnRequestStart(int request_id, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AutomationURLRequest& request) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_start_result_ = true; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuitMessageLoop(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnLoad(const GURL& url) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Base::OnLoad(url); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool request_start_result_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_FRAME_TEST_CHROME_FRAME_AUTOMATION_MOCK_H_ 241