1326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira// Use of this source code is governed by a BSD-style license that can be
3326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira// found in the LICENSE file.
4326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
5326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#ifndef CHROME_TEST_CHROMEDRIVER_CHROME_CHROME_IMPL_H_
6326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#define CHROME_TEST_CHROMEDRIVER_CHROME_CHROME_IMPL_H_
7326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
8326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include <list>
9326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include <string>
10326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
11326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include "base/compiler_specific.h"
12326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include "base/memory/linked_ptr.h"
13326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include "base/memory/scoped_ptr.h"
14326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include "base/memory/scoped_vector.h"
15326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#include "chrome/test/chromedriver/chrome/chrome.h"
16326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
17326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass AutomationExtension;
1830e2c24b056542f3b1b438aeb798305d1226d0c8Andy Huangstruct BrowserInfo;
19326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass DevToolsClient;
20b8331b4565566ca733997398e8c07a26cd2bee98Andy Huangclass DevToolsEventListener;
2194898ce43cba909e53378deb267658b9cc05ffeeAndrew Sappersteinclass DevToolsHttpClient;
22326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass JavaScriptDialogManager;
23326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass PortReservation;
24b8331b4565566ca733997398e8c07a26cd2bee98Andy Huangclass Status;
25326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass WebView;
26326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass WebViewImpl;
27326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
28326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereiraclass ChromeImpl : public Chrome {
2925dac86c30062d6488a39724794b52f44023dc4fBrian Attwell public:
30326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual ~ChromeImpl();
31326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
32326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  // Overridden from Chrome:
33326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual ChromeDesktopImpl* GetAsDesktop() OVERRIDE;
34326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual const BrowserInfo* GetBrowserInfo() OVERRIDE;
35326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual bool HasCrashedWebView() OVERRIDE;
362b806edc62eb8e83c77edc471fda4652281a15c4James Lemieux  virtual Status GetWebViewIds(std::list<std::string>* web_view_ids) OVERRIDE;
37980f55f9c46e0b490aa0a6662a1acef1fcb68782Brian Attwell  virtual Status GetWebViewById(const std::string& id,
388913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein                                WebView** web_view) OVERRIDE;
398913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein  virtual Status CloseWebView(const std::string& id) OVERRIDE;
408913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein  virtual Status ActivateWebView(const std::string& id) OVERRIDE;
41326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual bool IsMobileEmulationEnabled() const OVERRIDE;
42326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual Status Quit() OVERRIDE;
43326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
44326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira protected:
45326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  ChromeImpl(
46326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira      scoped_ptr<DevToolsHttpClient> http_client,
47b8331b4565566ca733997398e8c07a26cd2bee98Andy Huang      scoped_ptr<DevToolsClient> websocket_client,
48326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira      ScopedVector<DevToolsEventListener>& devtools_event_listeners,
49326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira      scoped_ptr<PortReservation> port_reservation);
50b8331b4565566ca733997398e8c07a26cd2bee98Andy Huang
51326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  virtual Status QuitImpl() = 0;
52326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
53326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  bool quit_;
54326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  scoped_ptr<DevToolsHttpClient> devtools_http_client_;
558913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein  scoped_ptr<DevToolsClient> devtools_websocket_client_;
568913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein
57326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira private:
58326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  typedef std::list<linked_ptr<WebViewImpl> > WebViewList;
598913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein
608913ca6aebe6017efe8060b61b8ad38eda95aa8bAndrew Sapperstein  // Web views in this list are in the same order as they are opened.
61326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  WebViewList web_views_;
62326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  ScopedVector<DevToolsEventListener> devtools_event_listeners_;
63326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira  scoped_ptr<PortReservation> port_reservation_;
64326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira};
65326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira
66326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira#endif  // CHROME_TEST_CHROMEDRIVER_CHROME_CHROME_IMPL_H_
67326c660df0a0a36a52ae74d8bafaa22d6f253561Mindy Pereira