| Index: content/browser/transition_request_manager.cc
|
| diff --git a/content/browser/transition_request_manager.cc b/content/browser/transition_request_manager.cc
|
| index 133dc3c5bea7fa8d2fb4c1c128770363168e9661..4a8752b58a032db801157c89d570eb2929ef6048 100644
|
| --- a/content/browser/transition_request_manager.cc
|
| +++ b/content/browser/transition_request_manager.cc
|
| @@ -72,6 +72,12 @@ bool EnumerateLinkHeaders(
|
|
|
| namespace content {
|
|
|
| +TransitionLayerData::TransitionLayerData() {
|
| +}
|
| +
|
| +TransitionLayerData::~TransitionLayerData() {
|
| +}
|
| +
|
| void TransitionRequestManager::ParseTransitionStylesheetsFromHeaders(
|
| const scoped_refptr<net::HttpResponseHeaders>& headers,
|
| std::vector<GURL>& entering_stylesheets,
|
| @@ -93,28 +99,62 @@ void TransitionRequestManager::ParseTransitionStylesheetsFromHeaders(
|
| }
|
| }
|
|
|
| +TransitionRequestManager::TransitionRequestData::TransitionRequestData() {
|
| +}
|
| +
|
| +TransitionRequestManager::TransitionRequestData::~TransitionRequestData() {
|
| +}
|
| +
|
| +void TransitionRequestManager::TransitionRequestData::AddEntry(
|
| + const std::string& origin,
|
| + const std::string& css_selector,
|
| + const std::string& markup) {
|
| + allowed_entries_.push_back(AllowedEntry(origin, css_selector, markup));
|
| +}
|
| +
|
| +bool TransitionRequestManager::TransitionRequestData::FindEntry(
|
| + const GURL& request_url,
|
| + TransitionLayerData* transition_data) {
|
| + DCHECK(!allowed_entries_.empty());
|
| + DCHECK(transition_data);
|
| + // TODO(oysteine): Add CSP check to validate the origin and the request_url.
|
| + const AllowedEntry& allowed_entry = allowed_entries_[0];
|
| + transition_data->markup = allowed_entry.markup;
|
| + transition_data->css_selector = allowed_entry.css_selector;
|
| + return true;
|
| +}
|
| +
|
| bool TransitionRequestManager::HasPendingTransitionRequest(
|
| - int process_id,
|
| - int render_frame_id) {
|
| + int render_process_id,
|
| + int render_frame_id,
|
| + const GURL& request_url,
|
| + TransitionLayerData* transition_data) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| -
|
| - std::pair<int, int> key(process_id, render_frame_id);
|
| - return (pending_transition_frames_.find(key) !=
|
| - pending_transition_frames_.end());
|
| + DCHECK(transition_data);
|
| + std::pair<int, int> key(render_process_id, render_frame_id);
|
| + RenderFrameRequestDataMap::iterator iter =
|
| + pending_transition_frames_.find(key);
|
| + return iter != pending_transition_frames_.end() &&
|
| + iter->second.FindEntry(request_url, transition_data);
|
| }
|
|
|
| -void TransitionRequestManager::SetHasPendingTransitionRequest(
|
| - int process_id,
|
| +void TransitionRequestManager::AddPendingTransitionRequestData(
|
| + int render_process_id,
|
| int render_frame_id,
|
| - bool has_pending) {
|
| + const std::string& origin,
|
| + const std::string& css_selector,
|
| + const std::string& markup) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| - std::pair<int, int> key(process_id, render_frame_id);
|
| - if (has_pending) {
|
| - pending_transition_frames_.insert(key);
|
| - } else {
|
| - pending_transition_frames_.erase(key);
|
| - }
|
| + std::pair<int, int> key(render_process_id, render_frame_id);
|
| + pending_transition_frames_[key].AddEntry(origin, css_selector, markup);
|
| +}
|
| +
|
| +void TransitionRequestManager::ClearPendingTransitionRequestData(
|
| + int render_process_id, int render_frame_id) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| + std::pair<int, int> key(render_process_id, render_frame_id);
|
| + pending_transition_frames_.erase(key);
|
| }
|
|
|
| TransitionRequestManager::TransitionRequestManager() {
|
|
|