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
5#ifndef CHROME_TEST_CHROMEDRIVER_CHROME_CHROME_IMPL_H_
6#define CHROME_TEST_CHROMEDRIVER_CHROME_CHROME_IMPL_H_
7
8#include <list>
9#include <string>
10
11#include "base/compiler_specific.h"
12#include "base/memory/linked_ptr.h"
13#include "base/memory/scoped_ptr.h"
14#include "base/memory/scoped_vector.h"
15#include "chrome/test/chromedriver/chrome/chrome.h"
16
17class AutomationExtension;
18struct BrowserInfo;
19class DevToolsClient;
20class DevToolsEventListener;
21class DevToolsHttpClient;
22class JavaScriptDialogManager;
23class PortReservation;
24class Status;
25class WebView;
26class WebViewImpl;
27
28class ChromeImpl : public Chrome {
29 public:
30  virtual ~ChromeImpl();
31
32  // Overridden from Chrome:
33  virtual ChromeDesktopImpl* GetAsDesktop() OVERRIDE;
34  virtual const BrowserInfo* GetBrowserInfo() OVERRIDE;
35  virtual bool HasCrashedWebView() OVERRIDE;
36  virtual Status GetWebViewIds(std::list<std::string>* web_view_ids) OVERRIDE;
37  virtual Status GetWebViewById(const std::string& id,
38                                WebView** web_view) OVERRIDE;
39  virtual Status CloseWebView(const std::string& id) OVERRIDE;
40  virtual Status ActivateWebView(const std::string& id) OVERRIDE;
41  virtual bool IsMobileEmulationEnabled() const OVERRIDE;
42  virtual Status Quit() OVERRIDE;
43
44 protected:
45  ChromeImpl(
46      scoped_ptr<DevToolsHttpClient> http_client,
47      scoped_ptr<DevToolsClient> websocket_client,
48      ScopedVector<DevToolsEventListener>& devtools_event_listeners,
49      scoped_ptr<PortReservation> port_reservation);
50
51  virtual Status QuitImpl() = 0;
52
53  bool quit_;
54  scoped_ptr<DevToolsHttpClient> devtools_http_client_;
55  scoped_ptr<DevToolsClient> devtools_websocket_client_;
56
57 private:
58  typedef std::list<linked_ptr<WebViewImpl> > WebViewList;
59
60  // Web views in this list are in the same order as they are opened.
61  WebViewList web_views_;
62  ScopedVector<DevToolsEventListener> devtools_event_listeners_;
63  scoped_ptr<PortReservation> port_reservation_;
64};
65
66#endif  // CHROME_TEST_CHROMEDRIVER_CHROME_CHROME_IMPL_H_
67