Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Side by Side Diff: chrome/browser/android/devtools_manager_delegate_android.cc

Issue 2833213002: DevTools: retain DTAH in all the targets to match their life time. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/devtools_manager_delegate_android.h" 5 #include "chrome/browser/android/devtools_manager_delegate_android.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 152 }
153 153
154 const int tab_id_; 154 const int tab_id_;
155 const std::string title_; 155 const std::string title_;
156 const GURL url_; 156 const GURL url_;
157 scoped_refptr<DevToolsAgentHost> agent_host_; 157 scoped_refptr<DevToolsAgentHost> agent_host_;
158 content::DevToolsExternalAgentProxy* proxy_; 158 content::DevToolsExternalAgentProxy* proxy_;
159 DISALLOW_COPY_AND_ASSIGN(TabProxyDelegate); 159 DISALLOW_COPY_AND_ASSIGN(TabProxyDelegate);
160 }; 160 };
161 161
162 scoped_refptr<DevToolsAgentHost> DevToolsAgentHostForTab(TabAndroid* tab) {
163 scoped_refptr<DevToolsAgentHost> result = tab->GetDevToolsAgentHost();
164 if (result)
165 return result;
166
167 result =
168 DevToolsAgentHost::Forward(base::IntToString(tab->GetAndroidId()),
169 base::WrapUnique(new TabProxyDelegate(tab)));
170 tab->SetDevToolsAgentHost(result);
171 return result;
172 }
173
162 } // namespace 174 } // namespace
163 175
164 DevToolsManagerDelegateAndroid::DevToolsManagerDelegateAndroid() 176 DevToolsManagerDelegateAndroid::DevToolsManagerDelegateAndroid()
165 : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) { 177 : network_protocol_handler_(new DevToolsNetworkProtocolHandler()) {
166 content::DevToolsAgentHost::AddObserver(this); 178 content::DevToolsAgentHost::AddObserver(this);
167 } 179 }
168 180
169 DevToolsManagerDelegateAndroid::~DevToolsManagerDelegateAndroid() { 181 DevToolsManagerDelegateAndroid::~DevToolsManagerDelegateAndroid() {
170 content::DevToolsAgentHost::RemoveObserver(this); 182 content::DevToolsAgentHost::RemoveObserver(this);
171 } 183 }
172 184
173 base::DictionaryValue* DevToolsManagerDelegateAndroid::HandleCommand( 185 base::DictionaryValue* DevToolsManagerDelegateAndroid::HandleCommand(
174 DevToolsAgentHost* agent_host, 186 DevToolsAgentHost* agent_host,
175 base::DictionaryValue* command_dict) { 187 base::DictionaryValue* command_dict) {
176 return network_protocol_handler_->HandleCommand(agent_host, command_dict); 188 return network_protocol_handler_->HandleCommand(agent_host, command_dict);
177 } 189 }
178 190
179 std::string DevToolsManagerDelegateAndroid::GetTargetType( 191 std::string DevToolsManagerDelegateAndroid::GetTargetType(
180 content::RenderFrameHost* host) { 192 content::RenderFrameHost* host) {
181 content::WebContents* web_contents = 193 content::WebContents* web_contents =
182 content::WebContents::FromRenderFrameHost(host); 194 content::WebContents::FromRenderFrameHost(host);
183 TabAndroid* tab = web_contents ? TabAndroid::FromWebContents(web_contents) 195 TabAndroid* tab = web_contents ? TabAndroid::FromWebContents(web_contents)
184 : nullptr; 196 : nullptr;
185 return tab ? DevToolsAgentHost::kTypePage : 197 return tab ? DevToolsAgentHost::kTypePage :
186 DevToolsAgentHost::kTypeOther; 198 DevToolsAgentHost::kTypeOther;
187 } 199 }
188 200
189 bool DevToolsManagerDelegateAndroid::DiscoverTargets( 201 bool DevToolsManagerDelegateAndroid::CanDiscoverTargets() {
190 const DevToolsAgentHost::DiscoveryCallback& callback) { 202 return true;
191 #if defined(OS_ANDROID) 203 }
204
205 DevToolsAgentHost::List DevToolsManagerDelegateAndroid::DiscoverTargets() {
192 // Enumerate existing tabs, including the ones with no WebContents. 206 // Enumerate existing tabs, including the ones with no WebContents.
193 DevToolsAgentHost::List result; 207 DevToolsAgentHost::List result;
194 std::set<WebContents*> tab_web_contents; 208 std::set<WebContents*> tab_web_contents;
195 for (TabModelList::const_iterator iter = TabModelList::begin(); 209 for (TabModelList::const_iterator iter = TabModelList::begin();
196 iter != TabModelList::end(); ++iter) { 210 iter != TabModelList::end(); ++iter) {
197 TabModel* model = *iter; 211 TabModel* model = *iter;
198 for (int i = 0; i < model->GetTabCount(); ++i) { 212 for (int i = 0; i < model->GetTabCount(); ++i) {
199 TabAndroid* tab = model->GetTabAt(i); 213 TabAndroid* tab = model->GetTabAt(i);
200 if (!tab) 214 if (!tab)
201 continue; 215 continue;
202 216
203 if (tab->web_contents()) 217 if (tab->web_contents())
204 tab_web_contents.insert(tab->web_contents()); 218 tab_web_contents.insert(tab->web_contents());
205 219 result.push_back(DevToolsAgentHostForTab(tab));
206 scoped_refptr<DevToolsAgentHost> host =
207 DevToolsAgentHost::Forward(
208 base::IntToString(tab->GetAndroidId()),
209 base::WrapUnique(new TabProxyDelegate(tab)));
210 result.push_back(host);
211 } 220 }
212 } 221 }
213 222
214 // Add descriptors for targets not associated with any tabs. 223 // Add descriptors for targets not associated with any tabs.
215 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); 224 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll();
216 for (DevToolsAgentHost::List::iterator it = agents.begin(); 225 for (DevToolsAgentHost::List::iterator it = agents.begin();
217 it != agents.end(); ++it) { 226 it != agents.end(); ++it) {
218 if (WebContents* web_contents = (*it)->GetWebContents()) { 227 if (WebContents* web_contents = (*it)->GetWebContents()) {
219 if (tab_web_contents.find(web_contents) != tab_web_contents.end()) 228 if (tab_web_contents.find(web_contents) != tab_web_contents.end())
220 continue; 229 continue;
221 } 230 }
222 result.push_back(*it); 231 result.push_back(*it);
223 } 232 }
224 233
225 callback.Run(std::move(result)); 234 return result;
226 return true;
227 #else
228 return false;
229 #endif // defined(OS_ANDROID)
230 } 235 }
231 236
232 scoped_refptr<DevToolsAgentHost> 237 scoped_refptr<DevToolsAgentHost>
233 DevToolsManagerDelegateAndroid::CreateNewTarget(const GURL& url) { 238 DevToolsManagerDelegateAndroid::CreateNewTarget(const GURL& url) {
234 if (TabModelList::empty()) 239 if (TabModelList::empty())
235 return nullptr; 240 return nullptr;
236 241
237 TabModel* tab_model = TabModelList::get(0); 242 TabModel* tab_model = TabModelList::get(0);
238 if (!tab_model) 243 if (!tab_model)
239 return nullptr; 244 return nullptr;
240 245
241 WebContents* web_contents = tab_model->CreateNewTabForDevTools(url); 246 WebContents* web_contents = tab_model->CreateNewTabForDevTools(url);
242 if (!web_contents) 247 if (!web_contents)
243 return nullptr; 248 return nullptr;
244 249
245 TabAndroid* tab = TabAndroid::FromWebContents(web_contents); 250 TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
246 if (!tab) 251 return tab ? DevToolsAgentHostForTab(tab) : nullptr;
247 return nullptr;
248
249 return DevToolsAgentHost::Forward(
250 base::IntToString(tab->GetAndroidId()),
251 base::WrapUnique(new TabProxyDelegate(tab)));
252 } 252 }
253 253
254 std::string DevToolsManagerDelegateAndroid::GetDiscoveryPageHTML() { 254 std::string DevToolsManagerDelegateAndroid::GetDiscoveryPageHTML() {
255 return ResourceBundle::GetSharedInstance().GetRawDataResource( 255 return ResourceBundle::GetSharedInstance().GetRawDataResource(
256 IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string(); 256 IDR_DEVTOOLS_DISCOVERY_PAGE_HTML).as_string();
257 } 257 }
258 258
259 void DevToolsManagerDelegateAndroid::DevToolsAgentHostAttached( 259 void DevToolsManagerDelegateAndroid::DevToolsAgentHostAttached(
260 content::DevToolsAgentHost* agent_host) { 260 content::DevToolsAgentHost* agent_host) {
261 network_protocol_handler_->DevToolsAgentStateChanged(agent_host, true); 261 network_protocol_handler_->DevToolsAgentStateChanged(agent_host, true);
262 } 262 }
263 263
264 void DevToolsManagerDelegateAndroid::DevToolsAgentHostDetached( 264 void DevToolsManagerDelegateAndroid::DevToolsAgentHostDetached(
265 content::DevToolsAgentHost* agent_host) { 265 content::DevToolsAgentHost* agent_host) {
266 network_protocol_handler_->DevToolsAgentStateChanged(agent_host, false); 266 network_protocol_handler_->DevToolsAgentStateChanged(agent_host, false);
267 } 267 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698