diff options
Diffstat (limited to 'content/browser')
-rw-r--r-- | content/browser/loader/cross_site_resource_handler.cc | 2 | ||||
-rw-r--r-- | content/browser/renderer_host/render_message_filter.cc | 5 | ||||
-rw-r--r-- | content/browser/transition_browsertest.cc | 2 | ||||
-rw-r--r-- | content/browser/transition_request_manager.cc | 25 | ||||
-rw-r--r-- | content/browser/transition_request_manager.h | 29 |
5 files changed, 29 insertions, 34 deletions
diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc index 596cf62..2ec5ee5 100644 --- a/content/browser/loader/cross_site_resource_handler.cc +++ b/content/browser/loader/cross_site_resource_handler.cc @@ -150,7 +150,7 @@ bool CrossSiteResourceHandler::OnResponseStarted( TransitionLayerData transition_data; bool is_navigation_transition = - TransitionRequestManager::GetInstance()->HasPendingTransitionRequest( + TransitionRequestManager::GetInstance()->GetPendingTransitionRequest( info->GetChildID(), info->GetRenderFrameID(), request()->url(), &transition_data); diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc index 27ad9c8..0474e08 100644 --- a/content/browser/renderer_host/render_message_filter.cc +++ b/content/browser/renderer_host/render_message_filter.cc @@ -1230,14 +1230,15 @@ void RenderMessageFilter::OnWebAudioMediaCodec( void RenderMessageFilter::OnAddNavigationTransitionData( FrameHostMsg_AddNavigationTransitionData_Params params) { + if (params.elements.size() > TransitionRequestManager::kMaxNumOfElements) + return; TransitionRequestManager::GetInstance()->AddPendingTransitionRequestData( render_process_id_, params.render_frame_id, params.allowed_destination_host_pattern, params.selector, params.markup, - params.names, - params.rects); + params.elements); } void RenderMessageFilter::OnAllocateGpuMemoryBuffer( diff --git a/content/browser/transition_browsertest.cc b/content/browser/transition_browsertest.cc index 147e771..1fba073 100644 --- a/content/browser/transition_browsertest.cc +++ b/content/browser/transition_browsertest.cc @@ -86,7 +86,7 @@ class TransitionBrowserTestObserver ResourceRequestInfoImpl::ForRequest(request_); TransitionLayerData transition_data; did_clear_data_ = !TransitionRequestManager::GetInstance( - )->HasPendingTransitionRequest(info->GetChildID(), + )->GetPendingTransitionRequest(info->GetChildID(), info->GetRenderFrameID(), request_->url(), &transition_data); diff --git a/content/browser/transition_request_manager.cc b/content/browser/transition_request_manager.cc index b863991..e3f4317 100644 --- a/content/browser/transition_request_manager.cc +++ b/content/browser/transition_request_manager.cc @@ -86,13 +86,11 @@ TransitionRequestManager::TransitionRequestData::AllowedEntry::AllowedEntry( const std::string& allowed_destination_host_pattern, const std::string& css_selector, const std::string& markup, - const std::vector<std::string>& names, - const std::vector<gfx::Rect>& rects) + const std::vector<TransitionElement>& elements) : allowed_destination_host_pattern(allowed_destination_host_pattern), css_selector(css_selector), markup(markup), - names(names), - rects(rects) { + elements(elements) { } TransitionRequestManager::TransitionRequestData::AllowedEntry::~AllowedEntry() { @@ -129,13 +127,11 @@ void TransitionRequestManager::TransitionRequestData::AddEntry( const std::string& allowed_destination_host_pattern, const std::string& css_selector, const std::string& markup, - const std::vector<std::string>& names, - const std::vector<gfx::Rect>& rects) { + const std::vector<TransitionElement>& elements) { allowed_entries_.push_back(AllowedEntry(allowed_destination_host_pattern, css_selector, markup, - names, - rects)); + elements)); } bool TransitionRequestManager::TransitionRequestData::FindEntry( @@ -153,12 +149,11 @@ bool TransitionRequestManager::TransitionRequestData::FindEntry( const AllowedEntry& allowed_entry = allowed_entries_[0]; transition_data->markup = allowed_entry.markup; transition_data->css_selector = allowed_entry.css_selector; - transition_data->names = allowed_entry.names; - transition_data->rects = allowed_entry.rects; + transition_data->elements = allowed_entry.elements; return true; } -bool TransitionRequestManager::HasPendingTransitionRequest( +bool TransitionRequestManager::GetPendingTransitionRequest( int render_process_id, int render_frame_id, const GURL& request_url, @@ -178,13 +173,12 @@ void TransitionRequestManager::AddPendingTransitionRequestData( const std::string& allowed_destination_host_pattern, const std::string& css_selector, const std::string& markup, - const std::vector<std::string>& names, - const std::vector<gfx::Rect>& rects) { + const std::vector<TransitionElement>& elements) { DCHECK_CURRENTLY_ON(BrowserThread::IO); std::pair<int, int> key(render_process_id, render_frame_id); pending_transition_frames_[key].AddEntry( - allowed_destination_host_pattern, css_selector, markup, names, rects); + allowed_destination_host_pattern, css_selector, markup, elements); } void TransitionRequestManager::AddPendingTransitionRequestDataForTesting( @@ -197,8 +191,7 @@ void TransitionRequestManager::AddPendingTransitionRequestDataForTesting( "*", /* allowed_destination_host_pattern */ "", /* css_selector */ "", /* markup */ - std::vector<std::string>(), /* names */ - std::vector<gfx::Rect>()); /* rects */ + std::vector<TransitionElement>()); /* elements */ } void TransitionRequestManager::ClearPendingTransitionRequestData( diff --git a/content/browser/transition_request_manager.h b/content/browser/transition_request_manager.h index 3db4d87..65b5792 100644 --- a/content/browser/transition_request_manager.h +++ b/content/browser/transition_request_manager.h @@ -13,6 +13,7 @@ #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "content/common/content_export.h" +#include "content/public/common/transition_element.h" #include "ui/gfx/geometry/rect.h" #include "url/gurl.h" @@ -33,8 +34,7 @@ struct TransitionLayerData { std::string markup; std::string css_selector; - std::vector<std::string> names; - std::vector<gfx::Rect> rects; + std::vector<TransitionElement> elements; scoped_refptr<net::HttpResponseHeaders> response_headers; GURL request_url; }; @@ -57,10 +57,11 @@ class TransitionRequestManager { std::vector<GURL>& entering_stylesheets, const GURL& resolve_address); - // Returns whether the RenderFrameHost specified by the given IDs currently - // has any pending transition request data. If so, we will have to delay the - // response until the embedder resumes the request. - CONTENT_EXPORT bool HasPendingTransitionRequest( + // Get pending transition request data from RenderFrameHost specified by the + // given IDs and return true if the data exists. For web to web transition, we + // will have to delay the response until the embedder resumes the request if + // the data exists. + CONTENT_EXPORT bool GetPendingTransitionRequest( int render_process_id, int render_frame_id, const GURL& request_url, @@ -74,8 +75,7 @@ class TransitionRequestManager { const std::string& allowed_destination_host_pattern, const std::string& css_selector, const std::string& markup, - const std::vector<std::string>& names, - const std::vector<gfx::Rect>& rects); + const std::vector<TransitionElement>& elements); CONTENT_EXPORT void AddPendingTransitionRequestDataForTesting( int render_process_id, int render_frame_id); @@ -83,6 +83,10 @@ class TransitionRequestManager { CONTENT_EXPORT void ClearPendingTransitionRequestData(int render_process_id, int render_frame_id); + // The maximum number of elements is meant to avoid passing arbitrarily large + // amount of objects across the IPC boundary. + static const int kMaxNumOfElements = 1024; + private: class TransitionRequestData { public: @@ -91,8 +95,7 @@ class TransitionRequestManager { void AddEntry(const std::string& allowed_destination_host_pattern, const std::string& selector, const std::string& markup, - const std::vector<std::string>& names, - const std::vector<gfx::Rect>& rects); + const std::vector<TransitionElement>& elements); bool FindEntry(const GURL& request_url, TransitionLayerData* transition_data); @@ -104,14 +107,12 @@ class TransitionRequestManager { std::string allowed_destination_host_pattern; std::string css_selector; std::string markup; - std::vector<std::string> names; - std::vector<gfx::Rect> rects; + std::vector<TransitionElement> elements; AllowedEntry(const std::string& allowed_destination_host_pattern, const std::string& css_selector, const std::string& markup, - const std::vector<std::string>& names, - const std::vector<gfx::Rect>& rects); + const std::vector<TransitionElement>& elements); ~AllowedEntry(); }; std::vector<AllowedEntry> allowed_entries_; |