1// Copyright (c) 2013 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_DEVTOOLS_HTTP_CLIENT_H_
6#define CHROME_TEST_CHROMEDRIVER_CHROME_DEVTOOLS_HTTP_CLIENT_H_
7
8#include <string>
9#include <vector>
10
11#include "base/memory/ref_counted.h"
12#include "base/memory/scoped_ptr.h"
13#include "chrome/test/chromedriver/chrome/browser_info.h"
14#include "chrome/test/chromedriver/net/sync_websocket_factory.h"
15
16namespace base {
17class TimeDelta;
18}
19
20struct DeviceMetrics;
21class DevToolsClient;
22class NetAddress;
23class Status;
24class URLRequestContextGetter;
25
26struct WebViewInfo {
27  enum Type {
28    kApp,
29    kBackgroundPage,
30    kPage,
31    kWorker,
32    kOther
33  };
34
35  WebViewInfo(const std::string& id,
36              const std::string& debugger_url,
37              const std::string& url,
38              Type type);
39  ~WebViewInfo();
40
41  bool IsFrontend() const;
42
43  std::string id;
44  std::string debugger_url;
45  std::string url;
46  Type type;
47};
48
49class WebViewsInfo {
50 public:
51  WebViewsInfo();
52  explicit WebViewsInfo(const std::vector<WebViewInfo>& info);
53  ~WebViewsInfo();
54
55  const WebViewInfo& Get(int index) const;
56  size_t GetSize() const;
57  const WebViewInfo* GetForId(const std::string& id) const;
58
59 private:
60  std::vector<WebViewInfo> views_info;
61};
62
63class DevToolsHttpClient {
64 public:
65  DevToolsHttpClient(
66      const NetAddress& address,
67      scoped_refptr<URLRequestContextGetter> context_getter,
68      const SyncWebSocketFactory& socket_factory,
69      scoped_ptr<DeviceMetrics> device_metrics);
70  ~DevToolsHttpClient();
71
72  Status Init(const base::TimeDelta& timeout);
73
74  Status GetWebViewsInfo(WebViewsInfo* views_info);
75
76  scoped_ptr<DevToolsClient> CreateClient(const std::string& id);
77
78  Status CloseWebView(const std::string& id);
79
80  Status ActivateWebView(const std::string& id);
81
82  const BrowserInfo* browser_info();
83  const DeviceMetrics* device_metrics();
84
85 private:
86  Status CloseFrontends(const std::string& for_client_id);
87  bool FetchUrlAndLog(const std::string& url,
88                      URLRequestContextGetter* getter,
89                      std::string* response);
90
91  scoped_refptr<URLRequestContextGetter> context_getter_;
92  SyncWebSocketFactory socket_factory_;
93  std::string server_url_;
94  std::string web_socket_url_prefix_;
95  BrowserInfo browser_info_;
96  scoped_ptr<DeviceMetrics> device_metrics_;
97
98  DISALLOW_COPY_AND_ASSIGN(DevToolsHttpClient);
99};
100
101namespace internal {
102Status ParseWebViewsInfo(const std::string& data,
103                         WebViewsInfo* views_info);
104}  // namespace internal
105
106#endif  // CHROME_TEST_CHROMEDRIVER_CHROME_DEVTOOLS_HTTP_CLIENT_H_
107