| 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 // Implements the Chrome Extensions WebNavigation API. | 5 // Implements the Chrome Extensions WebNavigation API. |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" | 7 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
| 11 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_consta
nts.h" | 11 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_consta
nts.h" |
| 12 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper
s.h" | 12 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_helper
s.h" |
| 13 #include "chrome/browser/extensions/extension_tab_util.h" | 13 #include "chrome/browser/extensions/extension_tab_util.h" |
| 14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
| 15 #include "chrome/browser/tab_contents/retargeting_details.h" | 15 #include "chrome/browser/tab_contents/retargeting_details.h" |
| 16 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
| 17 #include "chrome/browser/ui/browser_list.h" | 17 #include "chrome/browser/ui/browser_list.h" |
| 18 #include "chrome/common/extensions/api/web_navigation.h" | 18 #include "chrome/common/extensions/api/web_navigation.h" |
| 19 #include "content/public/browser/navigation_details.h" | 19 #include "content/public/browser/navigation_details.h" |
| 20 #include "content/public/browser/navigation_handle.h" |
| 20 #include "content/public/browser/notification_service.h" | 21 #include "content/public/browser/notification_service.h" |
| 21 #include "content/public/browser/notification_types.h" | 22 #include "content/public/browser/notification_types.h" |
| 22 #include "content/public/browser/render_frame_host.h" | 23 #include "content/public/browser/render_frame_host.h" |
| 23 #include "content/public/browser/render_process_host.h" | 24 #include "content/public/browser/render_process_host.h" |
| 24 #include "content/public/browser/resource_request_details.h" | 25 #include "content/public/browser/resource_request_details.h" |
| 25 #include "content/public/browser/web_contents.h" | 26 #include "content/public/browser/web_contents.h" |
| 26 #include "content/public/common/url_constants.h" | 27 #include "content/public/common/url_constants.h" |
| 27 #include "extensions/browser/event_router.h" | 28 #include "extensions/browser/event_router.h" |
| 28 #include "extensions/browser/extension_api_frame_id_map.h" | 29 #include "extensions/browser/extension_api_frame_id_map.h" |
| 29 #include "extensions/browser/view_type_utils.h" | 30 #include "extensions/browser/view_type_utils.h" |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 // static | 234 // static |
| 234 WebNavigationTabObserver* WebNavigationTabObserver::Get( | 235 WebNavigationTabObserver* WebNavigationTabObserver::Get( |
| 235 content::WebContents* web_contents) { | 236 content::WebContents* web_contents) { |
| 236 TabObserverMap::iterator i = g_tab_observer.Get().find(web_contents); | 237 TabObserverMap::iterator i = g_tab_observer.Get().find(web_contents); |
| 237 return i == g_tab_observer.Get().end() ? NULL : i->second; | 238 return i == g_tab_observer.Get().end() ? NULL : i->second; |
| 238 } | 239 } |
| 239 | 240 |
| 240 void WebNavigationTabObserver::RenderFrameDeleted( | 241 void WebNavigationTabObserver::RenderFrameDeleted( |
| 241 content::RenderFrameHost* render_frame_host) { | 242 content::RenderFrameHost* render_frame_host) { |
| 242 if (navigation_state_.CanSendEvents(render_frame_host) && | 243 if (navigation_state_.CanSendEvents(render_frame_host) && |
| 243 !navigation_state_.GetNavigationCompleted(render_frame_host)) { | 244 !navigation_state_.GetDocumentLoadCompleted(render_frame_host)) { |
| 244 helpers::DispatchOnErrorOccurred( | 245 helpers::DispatchOnErrorOccurred( |
| 245 web_contents(), | 246 web_contents(), |
| 246 render_frame_host, | 247 render_frame_host, |
| 247 navigation_state_.GetUrl(render_frame_host), | 248 navigation_state_.GetUrl(render_frame_host), |
| 248 net::ERR_ABORTED); | 249 net::ERR_ABORTED); |
| 249 navigation_state_.SetErrorOccurredInFrame(render_frame_host); | 250 navigation_state_.SetErrorOccurredInFrame(render_frame_host); |
| 250 } | 251 } |
| 251 } | 252 } |
| 252 | 253 |
| 253 void WebNavigationTabObserver::FrameDeleted( | 254 void WebNavigationTabObserver::FrameDeleted( |
| 254 content::RenderFrameHost* render_frame_host) { | 255 content::RenderFrameHost* render_frame_host) { |
| 255 navigation_state_.FrameHostDeleted(render_frame_host); | 256 navigation_state_.FrameHostDeleted(render_frame_host); |
| 256 } | 257 } |
| 257 | 258 |
| 258 void WebNavigationTabObserver::RenderFrameHostChanged( | 259 void WebNavigationTabObserver::RenderFrameHostChanged( |
| 259 content::RenderFrameHost* old_host, | 260 content::RenderFrameHost* old_host, |
| 260 content::RenderFrameHost* new_host) { | 261 content::RenderFrameHost* new_host) { |
| 261 if (old_host) { | 262 if (old_host) { |
| 262 RenderFrameDeleted(old_host); | 263 RenderFrameDeleted(old_host); |
| 263 navigation_state_.FrameHostDeleted(old_host); | 264 navigation_state_.FrameHostDeleted(old_host); |
| 264 } | 265 } |
| 265 | 266 |
| 266 navigation_state_.FrameHostCreated(new_host); | 267 navigation_state_.FrameHostCreated(new_host); |
| 267 } | 268 } |
| 268 | 269 |
| 269 void WebNavigationTabObserver::DidStartProvisionalLoadForFrame( | 270 void WebNavigationTabObserver::DidStartNavigation( |
| 270 content::RenderFrameHost* render_frame_host, | 271 content::NavigationHandle* navigation_handle) { |
| 271 const GURL& validated_url, | 272 if (navigation_handle->IsSynchronousNavigation() || |
| 272 bool is_error_page, | 273 !FrameNavigationState::IsValidUrl(navigation_handle->GetURL())) { |
| 273 bool is_iframe_srcdoc) { | 274 return; |
| 274 DVLOG(2) << "DidStartProvisionalLoad(" | 275 } |
| 275 << "render_frame_host=" << render_frame_host | |
| 276 << ", frame_num=" << render_frame_host->GetRoutingID() | |
| 277 << ", url=" << validated_url << ")"; | |
| 278 navigation_state_.StartTrackingNavigation(render_frame_host, validated_url, | |
| 279 is_error_page, is_iframe_srcdoc); | |
| 280 | 276 |
| 281 if (!navigation_state_.CanSendEvents(render_frame_host)) | 277 helpers::DispatchOnBeforeNavigate(navigation_handle); |
| 282 return; | |
| 283 | |
| 284 helpers::DispatchOnBeforeNavigate( | |
| 285 web_contents(), | |
| 286 render_frame_host, | |
| 287 navigation_state_.GetUrl(render_frame_host)); | |
| 288 } | 278 } |
| 289 | 279 |
| 290 void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame( | 280 void WebNavigationTabObserver::DidFinishNavigation( |
| 291 content::RenderFrameHost* render_frame_host, | 281 content::NavigationHandle* navigation_handle) { |
| 292 const GURL& url, | 282 if (navigation_handle->HasCommitted() && !navigation_handle->IsErrorPage()) { |
| 293 ui::PageTransition transition_type) { | 283 HandleCommit(navigation_handle); |
| 294 DVLOG(2) << "DidCommitProvisionalLoad(" | 284 return; |
| 295 << "render_frame_host=" << render_frame_host | 285 } |
| 296 << ", frame_num=" << render_frame_host->GetRoutingID() | |
| 297 << ", url=" << url << ")"; | |
| 298 bool is_reference_fragment_navigation = | |
| 299 IsReferenceFragmentNavigation(render_frame_host, url); | |
| 300 bool is_history_state_modification = | |
| 301 navigation_state_.GetNavigationCommitted(render_frame_host); | |
| 302 | 286 |
| 303 // Update the URL as it might have changed. | 287 HandleError(navigation_handle); |
| 304 navigation_state_.UpdateFrame(render_frame_host, url); | |
| 305 navigation_state_.SetNavigationCommitted(render_frame_host); | |
| 306 | |
| 307 if (!navigation_state_.CanSendEvents(render_frame_host)) | |
| 308 return; | |
| 309 | |
| 310 events::HistogramValue histogram_value = events::UNKNOWN; | |
| 311 std::string event_name; | |
| 312 if (is_reference_fragment_navigation) { | |
| 313 histogram_value = events::WEB_NAVIGATION_ON_REFERENCE_FRAGMENT_UPDATED; | |
| 314 event_name = web_navigation::OnReferenceFragmentUpdated::kEventName; | |
| 315 } else if (is_history_state_modification) { | |
| 316 histogram_value = events::WEB_NAVIGATION_ON_HISTORY_STATE_UPDATED; | |
| 317 event_name = web_navigation::OnHistoryStateUpdated::kEventName; | |
| 318 } else { | |
| 319 if (navigation_state_.GetIsServerRedirected(render_frame_host)) { | |
| 320 transition_type = ui::PageTransitionFromInt( | |
| 321 transition_type | ui::PAGE_TRANSITION_SERVER_REDIRECT); | |
| 322 } | |
| 323 histogram_value = events::WEB_NAVIGATION_ON_COMMITTED; | |
| 324 event_name = web_navigation::OnCommitted::kEventName; | |
| 325 } | |
| 326 helpers::DispatchOnCommitted( | |
| 327 histogram_value, event_name, web_contents(), render_frame_host, | |
| 328 navigation_state_.GetUrl(render_frame_host), transition_type); | |
| 329 } | |
| 330 | |
| 331 void WebNavigationTabObserver::DidFailProvisionalLoad( | |
| 332 content::RenderFrameHost* render_frame_host, | |
| 333 const GURL& validated_url, | |
| 334 int error_code, | |
| 335 const base::string16& error_description, | |
| 336 bool was_ignored_by_handler) { | |
| 337 DVLOG(2) << "DidFailProvisionalLoad(" | |
| 338 << "render_frame_host=" << render_frame_host | |
| 339 << ", frame_num=" << render_frame_host->GetRoutingID() | |
| 340 << ", url=" << validated_url << ")"; | |
| 341 if (navigation_state_.CanSendEvents(render_frame_host)) { | |
| 342 helpers::DispatchOnErrorOccurred( | |
| 343 web_contents(), | |
| 344 render_frame_host, | |
| 345 navigation_state_.GetUrl(render_frame_host), | |
| 346 error_code); | |
| 347 } | |
| 348 navigation_state_.SetErrorOccurredInFrame(render_frame_host); | |
| 349 } | 288 } |
| 350 | 289 |
| 351 void WebNavigationTabObserver::DocumentLoadedInFrame( | 290 void WebNavigationTabObserver::DocumentLoadedInFrame( |
| 352 content::RenderFrameHost* render_frame_host) { | 291 content::RenderFrameHost* render_frame_host) { |
| 353 DVLOG(2) << "DocumentLoadedInFrame(" | |
| 354 << "render_frame_host=" << render_frame_host | |
| 355 << ", frame_num=" << render_frame_host->GetRoutingID() << ")"; | |
| 356 if (!navigation_state_.CanSendEvents(render_frame_host)) | 292 if (!navigation_state_.CanSendEvents(render_frame_host)) |
| 357 return; | 293 return; |
| 294 |
| 358 navigation_state_.SetParsingFinished(render_frame_host); | 295 navigation_state_.SetParsingFinished(render_frame_host); |
| 359 helpers::DispatchOnDOMContentLoaded( | 296 helpers::DispatchOnDOMContentLoaded( |
| 360 web_contents(), | 297 web_contents(), |
| 361 render_frame_host, | 298 render_frame_host, |
| 362 navigation_state_.GetUrl(render_frame_host)); | 299 navigation_state_.GetUrl(render_frame_host)); |
| 363 | 300 |
| 364 if (!navigation_state_.GetNavigationCompleted(render_frame_host)) | 301 if (!navigation_state_.GetDocumentLoadCompleted(render_frame_host)) |
| 365 return; | 302 return; |
| 366 | 303 |
| 367 // The load might already have finished by the time we finished parsing. For | 304 // The load might already have finished by the time we finished parsing. For |
| 368 // compatibility reasons, we artifically delay the load completed signal until | 305 // compatibility reasons, we artifically delay the load completed signal until |
| 369 // after parsing was completed. | 306 // after parsing was completed. |
| 370 helpers::DispatchOnCompleted(web_contents(), | 307 helpers::DispatchOnCompleted(web_contents(), |
| 371 render_frame_host, | 308 render_frame_host, |
| 372 navigation_state_.GetUrl(render_frame_host)); | 309 navigation_state_.GetUrl(render_frame_host)); |
| 373 } | 310 } |
| 374 | 311 |
| 375 void WebNavigationTabObserver::DidFinishLoad( | 312 void WebNavigationTabObserver::DidFinishLoad( |
| 376 content::RenderFrameHost* render_frame_host, | 313 content::RenderFrameHost* render_frame_host, |
| 377 const GURL& validated_url) { | 314 const GURL& validated_url) { |
| 378 DVLOG(2) << "DidFinishLoad(" | |
| 379 << "render_frame_host=" << render_frame_host | |
| 380 << ", frame_num=" << render_frame_host->GetRoutingID() | |
| 381 << ", url=" << validated_url << ")"; | |
| 382 // When showing replacement content, we might get load signals for frames | 315 // When showing replacement content, we might get load signals for frames |
| 383 // that weren't reguarly loaded. | 316 // that weren't reguarly loaded. |
| 384 if (!navigation_state_.IsValidFrame(render_frame_host)) | 317 if (!navigation_state_.IsValidFrame(render_frame_host)) |
| 385 return; | 318 return; |
| 386 navigation_state_.SetNavigationCompleted(render_frame_host); | 319 |
| 320 navigation_state_.SetDocumentLoadCompleted(render_frame_host); |
| 387 if (!navigation_state_.CanSendEvents(render_frame_host)) | 321 if (!navigation_state_.CanSendEvents(render_frame_host)) |
| 388 return; | 322 return; |
| 389 | 323 |
| 390 // A new navigation might have started before the old one completed. | 324 // A new navigation might have started before the old one completed. |
| 391 // Ignore the old navigation completion in that case. | 325 // Ignore the old navigation completion in that case. |
| 392 // srcdoc iframes will report a url of about:blank, still let it through. | 326 // srcdoc iframes will report a url of about:blank, still let it through. |
| 393 if (navigation_state_.GetUrl(render_frame_host) != validated_url && | 327 if (navigation_state_.GetUrl(render_frame_host) != validated_url && |
| 394 (navigation_state_.GetUrl(render_frame_host) != | 328 (navigation_state_.GetUrl(render_frame_host) != |
| 395 GURL(content::kAboutSrcDocURL) || | 329 GURL(content::kAboutSrcDocURL) || |
| 396 validated_url != GURL(url::kAboutBlankURL))) { | 330 validated_url != GURL(url::kAboutBlankURL))) { |
| 397 return; | 331 return; |
| 398 } | 332 } |
| 399 | 333 |
| 400 // The load might already have finished by the time we finished parsing. For | 334 // The load might already have finished by the time we finished parsing. For |
| 401 // compatibility reasons, we artifically delay the load completed signal until | 335 // compatibility reasons, we artifically delay the load completed signal until |
| 402 // after parsing was completed. | 336 // after parsing was completed. |
| 403 if (!navigation_state_.GetParsingFinished(render_frame_host)) | 337 if (!navigation_state_.GetParsingFinished(render_frame_host)) |
| 404 return; | 338 return; |
| 405 helpers::DispatchOnCompleted(web_contents(), | 339 helpers::DispatchOnCompleted(web_contents(), |
| 406 render_frame_host, | 340 render_frame_host, |
| 407 navigation_state_.GetUrl(render_frame_host)); | 341 navigation_state_.GetUrl(render_frame_host)); |
| 408 } | 342 } |
| 409 | 343 |
| 410 void WebNavigationTabObserver::DidFailLoad( | 344 void WebNavigationTabObserver::DidFailLoad( |
| 411 content::RenderFrameHost* render_frame_host, | 345 content::RenderFrameHost* render_frame_host, |
| 412 const GURL& validated_url, | 346 const GURL& validated_url, |
| 413 int error_code, | 347 int error_code, |
| 414 const base::string16& error_description, | 348 const base::string16& error_description, |
| 415 bool was_ignored_by_handler) { | 349 bool was_ignored_by_handler) { |
| 416 DVLOG(2) << "DidFailLoad(" | |
| 417 << "render_frame_host=" << render_frame_host | |
| 418 << ", frame_num=" << render_frame_host->GetRoutingID() | |
| 419 << ", url=" << validated_url << ")"; | |
| 420 // When showing replacement content, we might get load signals for frames | 350 // When showing replacement content, we might get load signals for frames |
| 421 // that weren't reguarly loaded. | 351 // that weren't reguarly loaded. |
| 422 if (!navigation_state_.IsValidFrame(render_frame_host)) | 352 if (!navigation_state_.IsValidFrame(render_frame_host)) |
| 423 return; | 353 return; |
| 354 |
| 424 if (navigation_state_.CanSendEvents(render_frame_host)) { | 355 if (navigation_state_.CanSendEvents(render_frame_host)) { |
| 425 helpers::DispatchOnErrorOccurred( | 356 helpers::DispatchOnErrorOccurred( |
| 426 web_contents(), | 357 web_contents(), |
| 427 render_frame_host, | 358 render_frame_host, |
| 428 navigation_state_.GetUrl(render_frame_host), | 359 navigation_state_.GetUrl(render_frame_host), |
| 429 error_code); | 360 error_code); |
| 430 } | 361 } |
| 431 navigation_state_.SetErrorOccurredInFrame(render_frame_host); | 362 navigation_state_.SetErrorOccurredInFrame(render_frame_host); |
| 432 } | 363 } |
| 433 | 364 |
| 434 void WebNavigationTabObserver::DidGetRedirectForResourceRequest( | |
| 435 content::RenderFrameHost* render_frame_host, | |
| 436 const content::ResourceRedirectDetails& details) { | |
| 437 if (details.resource_type != content::RESOURCE_TYPE_MAIN_FRAME && | |
| 438 details.resource_type != content::RESOURCE_TYPE_SUB_FRAME) { | |
| 439 return; | |
| 440 } | |
| 441 navigation_state_.SetIsServerRedirected(render_frame_host); | |
| 442 } | |
| 443 | |
| 444 void WebNavigationTabObserver::DidOpenRequestedURL( | 365 void WebNavigationTabObserver::DidOpenRequestedURL( |
| 445 content::WebContents* new_contents, | 366 content::WebContents* new_contents, |
| 446 content::RenderFrameHost* source_render_frame_host, | 367 content::RenderFrameHost* source_render_frame_host, |
| 447 const GURL& url, | 368 const GURL& url, |
| 448 const content::Referrer& referrer, | 369 const content::Referrer& referrer, |
| 449 WindowOpenDisposition disposition, | 370 WindowOpenDisposition disposition, |
| 450 ui::PageTransition transition) { | 371 ui::PageTransition transition) { |
| 451 if (!navigation_state_.CanSendEvents(source_render_frame_host)) | 372 if (!navigation_state_.CanSendEvents(source_render_frame_host)) |
| 452 return; | 373 return; |
| 453 | 374 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 466 source_render_frame_host, | 387 source_render_frame_host, |
| 467 new_contents, | 388 new_contents, |
| 468 url); | 389 url); |
| 469 } | 390 } |
| 470 | 391 |
| 471 void WebNavigationTabObserver::WebContentsDestroyed() { | 392 void WebNavigationTabObserver::WebContentsDestroyed() { |
| 472 g_tab_observer.Get().erase(web_contents()); | 393 g_tab_observer.Get().erase(web_contents()); |
| 473 registrar_.RemoveAll(); | 394 registrar_.RemoveAll(); |
| 474 } | 395 } |
| 475 | 396 |
| 397 void WebNavigationTabObserver::HandleCommit( |
| 398 content::NavigationHandle* navigation_handle) { |
| 399 bool is_reference_fragment_navigation = IsReferenceFragmentNavigation( |
| 400 navigation_handle->GetRenderFrameHost(), navigation_handle->GetURL()); |
| 401 |
| 402 navigation_state_.StartTrackingDocumentLoad( |
| 403 navigation_handle->GetRenderFrameHost(), navigation_handle->GetURL(), |
| 404 navigation_handle->IsSamePage(), |
| 405 false, // is_error_page |
| 406 navigation_handle->IsSrcdoc()); |
| 407 |
| 408 events::HistogramValue histogram_value = events::UNKNOWN; |
| 409 std::string event_name; |
| 410 if (is_reference_fragment_navigation) { |
| 411 histogram_value = events::WEB_NAVIGATION_ON_REFERENCE_FRAGMENT_UPDATED; |
| 412 event_name = web_navigation::OnReferenceFragmentUpdated::kEventName; |
| 413 } else if (navigation_handle->IsSamePage()) { |
| 414 histogram_value = events::WEB_NAVIGATION_ON_HISTORY_STATE_UPDATED; |
| 415 event_name = web_navigation::OnHistoryStateUpdated::kEventName; |
| 416 } else { |
| 417 histogram_value = events::WEB_NAVIGATION_ON_COMMITTED; |
| 418 event_name = web_navigation::OnCommitted::kEventName; |
| 419 } |
| 420 helpers::DispatchOnCommitted(histogram_value, event_name, navigation_handle); |
| 421 } |
| 422 |
| 423 void WebNavigationTabObserver::HandleError( |
| 424 content::NavigationHandle* navigation_handle) { |
| 425 if (navigation_handle->HasCommitted()) { |
| 426 navigation_state_.StartTrackingDocumentLoad( |
| 427 navigation_handle->GetRenderFrameHost(), navigation_handle->GetURL(), |
| 428 navigation_handle->IsSamePage(), |
| 429 true, // is_error_page |
| 430 navigation_handle->IsSrcdoc()); |
| 431 } |
| 432 |
| 433 helpers::DispatchOnErrorOccurred(navigation_handle); |
| 434 } |
| 435 |
| 476 // See also NavigationController::IsURLInPageNavigation. | 436 // See also NavigationController::IsURLInPageNavigation. |
| 477 bool WebNavigationTabObserver::IsReferenceFragmentNavigation( | 437 bool WebNavigationTabObserver::IsReferenceFragmentNavigation( |
| 478 content::RenderFrameHost* render_frame_host, | 438 content::RenderFrameHost* render_frame_host, |
| 479 const GURL& url) { | 439 const GURL& url) { |
| 480 GURL existing_url = navigation_state_.GetUrl(render_frame_host); | 440 GURL existing_url = navigation_state_.GetUrl(render_frame_host); |
| 481 if (existing_url == url) | 441 if (existing_url == url) |
| 482 return false; | 442 return false; |
| 483 | 443 |
| 484 url::Replacements<char> replacements; | 444 url::Replacements<char> replacements; |
| 485 replacements.ClearRef(); | 445 replacements.ClearRef(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 | 482 |
| 523 GURL frame_url = frame_navigation_state.GetUrl(render_frame_host); | 483 GURL frame_url = frame_navigation_state.GetUrl(render_frame_host); |
| 524 if (!frame_navigation_state.IsValidUrl(frame_url)) | 484 if (!frame_navigation_state.IsValidUrl(frame_url)) |
| 525 return true; | 485 return true; |
| 526 | 486 |
| 527 GetFrame::Results::Details frame_details; | 487 GetFrame::Results::Details frame_details; |
| 528 frame_details.url = frame_url.spec(); | 488 frame_details.url = frame_url.spec(); |
| 529 frame_details.error_occurred = | 489 frame_details.error_occurred = |
| 530 frame_navigation_state.GetErrorOccurredInFrame(render_frame_host); | 490 frame_navigation_state.GetErrorOccurredInFrame(render_frame_host); |
| 531 frame_details.parent_frame_id = | 491 frame_details.parent_frame_id = |
| 532 helpers::GetFrameId(render_frame_host->GetParent()); | 492 ExtensionApiFrameIdMap::GetFrameId(render_frame_host->GetParent()); |
| 533 results_ = GetFrame::Results::Create(frame_details); | 493 results_ = GetFrame::Results::Create(frame_details); |
| 534 return true; | 494 return true; |
| 535 } | 495 } |
| 536 | 496 |
| 537 bool WebNavigationGetAllFramesFunction::RunSync() { | 497 bool WebNavigationGetAllFramesFunction::RunSync() { |
| 538 scoped_ptr<GetAllFrames::Params> params(GetAllFrames::Params::Create(*args_)); | 498 scoped_ptr<GetAllFrames::Params> params(GetAllFrames::Params::Create(*args_)); |
| 539 EXTENSION_FUNCTION_VALIDATE(params.get()); | 499 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 540 int tab_id = params->details.tab_id; | 500 int tab_id = params->details.tab_id; |
| 541 | 501 |
| 542 SetResult(base::Value::CreateNullValue()); | 502 SetResult(base::Value::CreateNullValue()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 562 | 522 |
| 563 std::vector<linked_ptr<GetAllFrames::Results::DetailsType> > result_list; | 523 std::vector<linked_ptr<GetAllFrames::Results::DetailsType> > result_list; |
| 564 for (FrameNavigationState::const_iterator it = navigation_state.begin(); | 524 for (FrameNavigationState::const_iterator it = navigation_state.begin(); |
| 565 it != navigation_state.end(); ++it) { | 525 it != navigation_state.end(); ++it) { |
| 566 GURL frame_url = navigation_state.GetUrl(*it); | 526 GURL frame_url = navigation_state.GetUrl(*it); |
| 567 if (!navigation_state.IsValidUrl(frame_url)) | 527 if (!navigation_state.IsValidUrl(frame_url)) |
| 568 continue; | 528 continue; |
| 569 linked_ptr<GetAllFrames::Results::DetailsType> frame( | 529 linked_ptr<GetAllFrames::Results::DetailsType> frame( |
| 570 new GetAllFrames::Results::DetailsType()); | 530 new GetAllFrames::Results::DetailsType()); |
| 571 frame->url = frame_url.spec(); | 531 frame->url = frame_url.spec(); |
| 572 frame->frame_id = helpers::GetFrameId(*it); | 532 frame->frame_id = ExtensionApiFrameIdMap::GetFrameId(*it); |
| 573 frame->parent_frame_id = helpers::GetFrameId((*it)->GetParent()); | 533 frame->parent_frame_id = |
| 534 ExtensionApiFrameIdMap::GetFrameId((*it)->GetParent()); |
| 574 frame->process_id = (*it)->GetProcess()->GetID(); | 535 frame->process_id = (*it)->GetProcess()->GetID(); |
| 575 frame->error_occurred = navigation_state.GetErrorOccurredInFrame(*it); | 536 frame->error_occurred = navigation_state.GetErrorOccurredInFrame(*it); |
| 576 result_list.push_back(frame); | 537 result_list.push_back(frame); |
| 577 } | 538 } |
| 578 results_ = GetAllFrames::Results::Create(result_list); | 539 results_ = GetAllFrames::Results::Create(result_list); |
| 579 return true; | 540 return true; |
| 580 } | 541 } |
| 581 | 542 |
| 582 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context) | 543 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context) |
| 583 : browser_context_(context) { | 544 : browser_context_(context) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 return g_factory.Pointer(); | 577 return g_factory.Pointer(); |
| 617 } | 578 } |
| 618 | 579 |
| 619 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { | 580 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { |
| 620 web_navigation_event_router_.reset(new WebNavigationEventRouter( | 581 web_navigation_event_router_.reset(new WebNavigationEventRouter( |
| 621 Profile::FromBrowserContext(browser_context_))); | 582 Profile::FromBrowserContext(browser_context_))); |
| 622 EventRouter::Get(browser_context_)->UnregisterObserver(this); | 583 EventRouter::Get(browser_context_)->UnregisterObserver(this); |
| 623 } | 584 } |
| 624 | 585 |
| 625 } // namespace extensions | 586 } // namespace extensions |
| OLD | NEW |