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