OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/ui/webui/devtools_ui.h" | 5 #include "chrome/browser/ui/webui/devtools_ui.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/memory/ref_counted_memory.h" | 10 #include "base/memory/ref_counted_memory.h" |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 Profile* profile, | 262 Profile* profile, |
263 const std::string url, | 263 const std::string url, |
264 const DevToolsAndroidBridge::RemotePageCallback& callback); | 264 const DevToolsAndroidBridge::RemotePageCallback& callback); |
265 virtual ~OpenRemotePageRequest() {} | 265 virtual ~OpenRemotePageRequest() {} |
266 | 266 |
267 private: | 267 private: |
268 // DevToolsAndroidBridge::Listener overrides. | 268 // DevToolsAndroidBridge::Listener overrides. |
269 virtual void DeviceListChanged( | 269 virtual void DeviceListChanged( |
270 const DevToolsAndroidBridge::RemoteDevices& devices) override; | 270 const DevToolsAndroidBridge::RemoteDevices& devices) override; |
271 | 271 |
272 bool OpenInBrowser(DevToolsAndroidBridge::RemoteBrowser* browser); | 272 bool OpenInBrowser( |
273 void RemotePageOpened(DevToolsAndroidBridge::RemotePage* page); | 273 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser); |
| 274 void RemotePageOpened(scoped_refptr<DevToolsAndroidBridge::RemotePage> page); |
274 | 275 |
275 std::string url_; | 276 std::string url_; |
276 DevToolsAndroidBridge::RemotePageCallback callback_; | 277 DevToolsAndroidBridge::RemotePageCallback callback_; |
277 bool opening_; | 278 bool opening_; |
278 scoped_refptr<DevToolsAndroidBridge> android_bridge_; | 279 scoped_refptr<DevToolsAndroidBridge> android_bridge_; |
279 | 280 |
280 DISALLOW_COPY_AND_ASSIGN(OpenRemotePageRequest); | 281 DISALLOW_COPY_AND_ASSIGN(OpenRemotePageRequest); |
281 }; | 282 }; |
282 | 283 |
283 OpenRemotePageRequest::OpenRemotePageRequest( | 284 OpenRemotePageRequest::OpenRemotePageRequest( |
(...skipping 24 matching lines...) Expand all Loading... |
308 browsers.begin(); bit != browsers.end(); ++bit) { | 309 browsers.begin(); bit != browsers.end(); ++bit) { |
309 if (OpenInBrowser(bit->get())) { | 310 if (OpenInBrowser(bit->get())) { |
310 opening_ = true; | 311 opening_ = true; |
311 return; | 312 return; |
312 } | 313 } |
313 } | 314 } |
314 } | 315 } |
315 } | 316 } |
316 | 317 |
317 bool OpenRemotePageRequest::OpenInBrowser( | 318 bool OpenRemotePageRequest::OpenInBrowser( |
318 DevToolsAndroidBridge::RemoteBrowser* browser) { | 319 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser) { |
319 if (!browser->IsChrome()) | 320 if (!browser->IsChrome()) |
320 return false; | 321 return false; |
321 #if defined(DEBUG_DEVTOOLS) | 322 #if defined(DEBUG_DEVTOOLS) |
322 if (browser->serial() == kLocalSerial) | 323 if (browser->serial() == kLocalSerial) |
323 return false; | 324 return false; |
324 #endif // defined(DEBUG_DEVTOOLS) | 325 #endif // defined(DEBUG_DEVTOOLS) |
325 android_bridge_->OpenRemotePage( | 326 android_bridge_->OpenRemotePage( |
326 browser, | 327 browser, |
327 url_, | 328 url_, |
328 base::Bind(&OpenRemotePageRequest::RemotePageOpened, | 329 base::Bind(&OpenRemotePageRequest::RemotePageOpened, |
329 base::Unretained(this))); | 330 base::Unretained(this))); |
330 return true; | 331 return true; |
331 } | 332 } |
332 | 333 |
333 void OpenRemotePageRequest::RemotePageOpened( | 334 void OpenRemotePageRequest::RemotePageOpened( |
334 DevToolsAndroidBridge::RemotePage* page) { | 335 scoped_refptr<DevToolsAndroidBridge::RemotePage> page) { |
335 callback_.Run(page); | 336 callback_.Run(page); |
336 android_bridge_->RemoveDeviceListListener(this); | 337 android_bridge_->RemoveDeviceListListener(this); |
337 delete this; | 338 delete this; |
338 } | 339 } |
339 | 340 |
340 } // namespace | 341 } // namespace |
341 | 342 |
342 // DevToolsUI ----------------------------------------------------------------- | 343 // DevToolsUI ----------------------------------------------------------------- |
343 | 344 |
344 // static | 345 // static |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 bindings_.Detach(); | 389 bindings_.Detach(); |
389 remote_page_opening_url_ = entry->GetVirtualURL(); | 390 remote_page_opening_url_ = entry->GetVirtualURL(); |
390 new OpenRemotePageRequest(Profile::FromWebUI(web_ui()), | 391 new OpenRemotePageRequest(Profile::FromWebUI(web_ui()), |
391 entry->GetVirtualURL().query(), | 392 entry->GetVirtualURL().query(), |
392 base::Bind(&DevToolsUI::RemotePageOpened, | 393 base::Bind(&DevToolsUI::RemotePageOpened, |
393 weak_factory_.GetWeakPtr(), | 394 weak_factory_.GetWeakPtr(), |
394 entry->GetVirtualURL())); | 395 entry->GetVirtualURL())); |
395 } | 396 } |
396 | 397 |
397 void DevToolsUI::RemotePageOpened( | 398 void DevToolsUI::RemotePageOpened( |
398 const GURL& virtual_url, DevToolsAndroidBridge::RemotePage* page) { | 399 const GURL& virtual_url, |
| 400 scoped_refptr<DevToolsAndroidBridge::RemotePage> page) { |
399 // Already navigated away while connecting to remote device. | 401 // Already navigated away while connecting to remote device. |
400 if (remote_page_opening_url_ != virtual_url) | 402 if (remote_page_opening_url_ != virtual_url) |
401 return; | 403 return; |
402 | 404 |
403 scoped_ptr<DevToolsAndroidBridge::RemotePage> my_page(page); | |
404 remote_page_opening_url_ = GURL(); | 405 remote_page_opening_url_ = GURL(); |
405 | 406 |
406 Profile* profile = Profile::FromWebUI(web_ui()); | 407 Profile* profile = Profile::FromWebUI(web_ui()); |
407 GURL url = DevToolsUIBindings::ApplyThemeToURL(profile, | 408 GURL url = DevToolsUIBindings::ApplyThemeToURL(profile, |
408 DevToolsUI::GetProxyURL(page->GetFrontendURL())); | 409 DevToolsUI::GetProxyURL(page->frontend_url())); |
409 | 410 |
410 content::NavigationController& navigation_controller = | 411 content::NavigationController& navigation_controller = |
411 web_ui()->GetWebContents()->GetController(); | 412 web_ui()->GetWebContents()->GetController(); |
412 content::NavigationController::LoadURLParams params(url); | 413 content::NavigationController::LoadURLParams params(url); |
413 params.should_replace_current_entry = true; | 414 params.should_replace_current_entry = true; |
414 remote_frontend_loading_url_ = virtual_url; | 415 remote_frontend_loading_url_ = virtual_url; |
415 navigation_controller.LoadURLWithParams(params); | 416 navigation_controller.LoadURLWithParams(params); |
416 navigation_controller.GetPendingEntry()->SetVirtualURL(virtual_url); | 417 navigation_controller.GetPendingEntry()->SetVirtualURL(virtual_url); |
417 | 418 |
418 bindings_.AttachTo(page->GetTarget()->GetAgentHost()); | 419 DevToolsAndroidBridge* bridge = |
| 420 DevToolsAndroidBridge::Factory::GetForProfile(profile); |
| 421 scoped_ptr<DevToolsTargetImpl> target(bridge->CreatePageTarget(page)); |
| 422 bindings_.AttachTo(target->GetAgentHost()); |
419 } | 423 } |
OLD | NEW |