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