Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / test / chromedriver / chrome / chrome_impl.cc
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 #include "chrome/test/chromedriver/chrome/chrome_impl.h"
6
7 #include "chrome/test/chromedriver/chrome/devtools_client.h"
8 #include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
9 #include "chrome/test/chromedriver/chrome/devtools_http_client.h"
10 #include "chrome/test/chromedriver/chrome/status.h"
11 #include "chrome/test/chromedriver/chrome/web_view_impl.h"
12 #include "chrome/test/chromedriver/net/port_server.h"
13
14 ChromeImpl::~ChromeImpl() {
15   if (!quit_)
16     port_reservation_->Leak();
17 }
18
19 ChromeDesktopImpl* ChromeImpl::GetAsDesktop() {
20   return NULL;
21 }
22
23 const BrowserInfo* ChromeImpl::GetBrowserInfo() {
24   return devtools_http_client_->browser_info();
25 }
26
27 bool ChromeImpl::HasCrashedWebView() {
28   for (WebViewList::iterator it = web_views_.begin();
29        it != web_views_.end(); ++it) {
30     if ((*it)->WasCrashed())
31       return true;
32   }
33   return false;
34 }
35
36 Status ChromeImpl::GetWebViewIds(std::list<std::string>* web_view_ids) {
37   WebViewsInfo views_info;
38   Status status = devtools_http_client_->GetWebViewsInfo(&views_info);
39   if (status.IsError())
40     return status;
41
42   // Check if some web views are closed.
43   WebViewList::iterator it = web_views_.begin();
44   while (it != web_views_.end()) {
45     if (!views_info.GetForId((*it)->GetId())) {
46       it = web_views_.erase(it);
47     } else {
48       ++it;
49     }
50   }
51
52   // Check for newly-opened web views.
53   for (size_t i = 0; i < views_info.GetSize(); ++i) {
54     const WebViewInfo& view = views_info.Get(i);
55     if (view.type != WebViewInfo::kPage && view.type != WebViewInfo::kApp)
56       continue;
57
58     bool found = false;
59     for (WebViewList::const_iterator web_view_iter = web_views_.begin();
60          web_view_iter != web_views_.end(); ++web_view_iter) {
61       if ((*web_view_iter)->GetId() == view.id) {
62         found = true;
63         break;
64       }
65     }
66     if (!found) {
67       scoped_ptr<DevToolsClient> client(
68           devtools_http_client_->CreateClient(view.id));
69       for (ScopedVector<DevToolsEventListener>::const_iterator listener =
70                devtools_event_listeners_.begin();
71            listener != devtools_event_listeners_.end(); ++listener) {
72         client->AddListener(*listener);
73         // OnConnected will fire when DevToolsClient connects later.
74       }
75       web_views_.push_back(make_linked_ptr(new WebViewImpl(
76           view.id,
77           devtools_http_client_->browser_info(),
78           client.Pass(),
79           devtools_http_client_->device_metrics())));
80     }
81   }
82
83   std::list<std::string> web_view_ids_tmp;
84   for (WebViewList::const_iterator web_view_iter = web_views_.begin();
85        web_view_iter != web_views_.end(); ++web_view_iter) {
86     web_view_ids_tmp.push_back((*web_view_iter)->GetId());
87   }
88   web_view_ids->swap(web_view_ids_tmp);
89   return Status(kOk);
90 }
91
92 Status ChromeImpl::GetWebViewById(const std::string& id, WebView** web_view) {
93   for (WebViewList::iterator it = web_views_.begin();
94        it != web_views_.end(); ++it) {
95     if ((*it)->GetId() == id) {
96       *web_view = (*it).get();
97       return Status(kOk);
98     }
99   }
100   return Status(kUnknownError, "web view not found");
101 }
102
103 Status ChromeImpl::CloseWebView(const std::string& id) {
104   Status status = devtools_http_client_->CloseWebView(id);
105   if (status.IsError())
106     return status;
107   for (WebViewList::iterator iter = web_views_.begin();
108        iter != web_views_.end(); ++iter) {
109     if ((*iter)->GetId() == id) {
110       web_views_.erase(iter);
111       break;
112     }
113   }
114   return Status(kOk);
115 }
116
117 Status ChromeImpl::ActivateWebView(const std::string& id) {
118   return devtools_http_client_->ActivateWebView(id);
119 }
120
121 bool ChromeImpl::IsMobileEmulationEnabled() const {
122   return false;
123 }
124
125 Status ChromeImpl::Quit() {
126   Status status = QuitImpl();
127   if (status.IsOk())
128     quit_ = true;
129   return status;
130 }
131
132 ChromeImpl::ChromeImpl(
133     scoped_ptr<DevToolsHttpClient> http_client,
134     scoped_ptr<DevToolsClient> websocket_client,
135     ScopedVector<DevToolsEventListener>& devtools_event_listeners,
136     scoped_ptr<PortReservation> port_reservation)
137     : quit_(false),
138       devtools_http_client_(http_client.Pass()),
139       devtools_websocket_client_(websocket_client.Pass()),
140       port_reservation_(port_reservation.Pass()) {
141   devtools_event_listeners_.swap(devtools_event_listeners);
142 }