1// Copyright (c) 2012 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#ifndef CHROME_FRAME_TEST_NET_TEST_AUTOMATION_PROVIDER_H_
5#define CHROME_FRAME_TEST_NET_TEST_AUTOMATION_PROVIDER_H_
6
7#include <string>
8#include "chrome/browser/automation/automation_provider.h"
9
10namespace net {
11class NetworkDelegate;
12class URLRequest;
13class URLRequestJob;
14}  // namespace net
15
16class TestAutomationResourceMessageFilter;
17
18// Callback interface for TestAutomationProvider.
19class TestAutomationProviderDelegate {
20 public:
21  virtual void OnInitialTabLoaded() = 0;
22  virtual void OnProviderDestroyed() = 0;
23};
24
25// A slightly customized version of AutomationProvider.
26// We override AutomationProvider to be able to filter received messages
27// (see TestAutomationResourceMessageFilter) and know when the initial
28// ExternalTab has been loaded.
29// In order to intercept UrlRequests and make the URLRequestAutomationJob class
30// handle requests from unit tests, we register a protocol factory for
31// http/https.
32class TestAutomationProvider
33    : public AutomationProvider {
34 public:
35  TestAutomationProvider(Profile* profile,
36                         TestAutomationProviderDelegate* delegate);
37
38  virtual ~TestAutomationProvider();
39
40  // AutomationProvider overrides.
41  virtual bool OnMessageReceived(const IPC::Message& msg);
42  virtual bool Send(IPC::Message* msg);
43
44  // Protocol factory for handling http/https requests over automation.
45  static net::URLRequestJob* Factory(net::URLRequest* request,
46                                     net::NetworkDelegate* network_delegate,
47                                     const std::string& scheme);
48
49  // Call to instantiate and initialize a new instance of
50  // TestAutomationProvider.
51  static TestAutomationProvider* NewAutomationProvider(
52      Profile* p,
53      const std::string& channel,
54      TestAutomationProviderDelegate* delegate);
55
56 protected:
57  virtual std::string GetProtocolVersion();
58
59  int tab_handle_;
60  TestAutomationProviderDelegate* delegate_;
61
62  static TestAutomationProvider* g_provider_instance_;
63};
64
65#endif  // CHROME_FRAME_TEST_NET_TEST_AUTOMATION_PROVIDER_H_
66