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

Side by Side Diff: chrome/browser/extensions/api/web_navigation/web_navigation_api.cc

Issue 380213003: Harden WebNavigation API against invalid navigation callbacks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
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"
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 366
367 if (!navigation_state_.CanSendEvents(frame_id)) 367 if (!navigation_state_.CanSendEvents(frame_id))
368 return; 368 return;
369 369
370 helpers::DispatchOnBeforeNavigate( 370 helpers::DispatchOnBeforeNavigate(
371 web_contents(), 371 web_contents(),
372 render_view_host->GetProcess()->GetID(), 372 render_view_host->GetProcess()->GetID(),
373 frame_id.frame_num, 373 frame_id.frame_num,
374 is_main_frame, 374 is_main_frame,
375 parent_frame_id.frame_num, 375 parent_frame_id.frame_num,
376 navigation_state_.IsMainFrame(parent_frame_id), 376 is_main_frame ? false : navigation_state_.IsMainFrame(parent_frame_id),
377 navigation_state_.GetUrl(frame_id)); 377 navigation_state_.GetUrl(frame_id));
378 } 378 }
379 379
380 void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame( 380 void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
381 content::RenderFrameHost* render_frame_host, 381 content::RenderFrameHost* render_frame_host,
382 const GURL& url, 382 const GURL& url,
383 content::PageTransition transition_type) { 383 content::PageTransition transition_type) {
384 content::RenderViewHost* render_view_host = 384 content::RenderViewHost* render_view_host =
385 render_frame_host->GetRenderViewHost(); 385 render_frame_host->GetRenderViewHost();
386 DVLOG(2) << "DidCommitProvisionalLoad(" 386 DVLOG(2) << "DidCommitProvisionalLoad("
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 GURL frame_url = frame_navigation_state.GetUrl(internal_frame_id); 746 GURL frame_url = frame_navigation_state.GetUrl(internal_frame_id);
747 if (!frame_navigation_state.IsValidUrl(frame_url)) 747 if (!frame_navigation_state.IsValidUrl(frame_url))
748 return true; 748 return true;
749 749
750 GetFrame::Results::Details frame_details; 750 GetFrame::Results::Details frame_details;
751 frame_details.url = frame_url.spec(); 751 frame_details.url = frame_url.spec();
752 frame_details.error_occurred = 752 frame_details.error_occurred =
753 frame_navigation_state.GetErrorOccurredInFrame(internal_frame_id); 753 frame_navigation_state.GetErrorOccurredInFrame(internal_frame_id);
754 FrameNavigationState::FrameID parent_frame_id = 754 FrameNavigationState::FrameID parent_frame_id =
755 frame_navigation_state.GetParentFrameID(internal_frame_id); 755 frame_navigation_state.GetParentFrameID(internal_frame_id);
756 frame_details.parent_frame_id = helpers::GetFrameId( 756 if (parent_frame_id.frame_num == -1) {
757 frame_navigation_state.IsMainFrame(parent_frame_id), 757 frame_details.parent_frame_id = -1;
758 parent_frame_id.frame_num); 758 } else {
759 frame_details.parent_frame_id =
760 helpers::GetFrameId(frame_navigation_state.IsMainFrame(parent_frame_id),
761 parent_frame_id.frame_num);
762 }
759 results_ = GetFrame::Results::Create(frame_details); 763 results_ = GetFrame::Results::Create(frame_details);
760 return true; 764 return true;
761 } 765 }
762 766
763 bool WebNavigationGetAllFramesFunction::RunSync() { 767 bool WebNavigationGetAllFramesFunction::RunSync() {
764 scoped_ptr<GetAllFrames::Params> params(GetAllFrames::Params::Create(*args_)); 768 scoped_ptr<GetAllFrames::Params> params(GetAllFrames::Params::Create(*args_));
765 EXTENSION_FUNCTION_VALIDATE(params.get()); 769 EXTENSION_FUNCTION_VALIDATE(params.get());
766 int tab_id = params->details.tab_id; 770 int tab_id = params->details.tab_id;
767 771
768 SetResult(base::Value::CreateNullValue()); 772 SetResult(base::Value::CreateNullValue());
(...skipping 24 matching lines...) Expand all
793 FrameNavigationState::FrameID parent_frame_id = 797 FrameNavigationState::FrameID parent_frame_id =
794 navigation_state.GetParentFrameID(frame_id); 798 navigation_state.GetParentFrameID(frame_id);
795 GURL frame_url = navigation_state.GetUrl(frame_id); 799 GURL frame_url = navigation_state.GetUrl(frame_id);
796 if (!navigation_state.IsValidUrl(frame_url)) 800 if (!navigation_state.IsValidUrl(frame_url))
797 continue; 801 continue;
798 linked_ptr<GetAllFrames::Results::DetailsType> frame( 802 linked_ptr<GetAllFrames::Results::DetailsType> frame(
799 new GetAllFrames::Results::DetailsType()); 803 new GetAllFrames::Results::DetailsType());
800 frame->url = frame_url.spec(); 804 frame->url = frame_url.spec();
801 frame->frame_id = helpers::GetFrameId( 805 frame->frame_id = helpers::GetFrameId(
802 navigation_state.IsMainFrame(frame_id), frame_id.frame_num); 806 navigation_state.IsMainFrame(frame_id), frame_id.frame_num);
803 frame->parent_frame_id = helpers::GetFrameId( 807 if (parent_frame_id.frame_num == -1) {
804 navigation_state.IsMainFrame(parent_frame_id), 808 frame->parent_frame_id = -1;
805 parent_frame_id.frame_num); 809 } else {
810 frame->parent_frame_id =
811 helpers::GetFrameId(navigation_state.IsMainFrame(parent_frame_id),
812 parent_frame_id.frame_num);
813 }
806 frame->process_id = frame_id.render_view_host->GetProcess()->GetID(); 814 frame->process_id = frame_id.render_view_host->GetProcess()->GetID();
807 frame->error_occurred = navigation_state.GetErrorOccurredInFrame(frame_id); 815 frame->error_occurred = navigation_state.GetErrorOccurredInFrame(frame_id);
808 result_list.push_back(frame); 816 result_list.push_back(frame);
809 } 817 }
810 results_ = GetAllFrames::Results::Create(result_list); 818 results_ = GetAllFrames::Results::Create(result_list);
811 return true; 819 return true;
812 } 820 }
813 821
814 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context) 822 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context)
815 : browser_context_(context) { 823 : browser_context_(context) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 return g_factory.Pointer(); 856 return g_factory.Pointer();
849 } 857 }
850 858
851 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) { 859 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) {
852 web_navigation_event_router_.reset(new WebNavigationEventRouter( 860 web_navigation_event_router_.reset(new WebNavigationEventRouter(
853 Profile::FromBrowserContext(browser_context_))); 861 Profile::FromBrowserContext(browser_context_)));
854 EventRouter::Get(browser_context_)->UnregisterObserver(this); 862 EventRouter::Get(browser_context_)->UnregisterObserver(this);
855 } 863 }
856 864
857 } // namespace extensions 865 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698