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

Unified Diff: content/browser/transition_request_manager.h

Issue 435833002: Navigation transitions: Plumb data from the outgoing renderer to the incoming renderer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Testfix Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/transition_browsertest.cc ('k') | content/browser/transition_request_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/transition_request_manager.h
diff --git a/content/browser/transition_request_manager.h b/content/browser/transition_request_manager.h
index 48be189ca50e0dfb7016dd909116bba22187f122..0a01878eb1a5f6d3f7a0e3bbacaf8ae3216bce3f 100644
--- a/content/browser/transition_request_manager.h
+++ b/content/browser/transition_request_manager.h
@@ -5,7 +5,8 @@
#ifndef CONTENT_BROWSER_TRANSITION_REQUEST_MANAGER_H_
#define CONTENT_BROWSER_TRANSITION_REQUEST_MANAGER_H_
-#include <set>
+#include <map>
+#include <string>
#include <utility>
#include <vector>
@@ -20,9 +21,21 @@ struct DefaultSingletonTraits;
namespace net {
class HttpResponseHeaders;
}
+class GURL;
namespace content {
+// This struct passes data about an imminent transition between threads.
+struct TransitionLayerData {
+ TransitionLayerData();
+ ~TransitionLayerData();
+
+ std::string markup;
+ std::string css_selector;
+ scoped_refptr<net::HttpResponseHeaders> response_headers;
+ GURL request_url;
+};
+
// TransitionRequestManager is used to handle bookkeeping for transition
// requests and responses.
//
@@ -42,28 +55,67 @@ class TransitionRequestManager {
const GURL& resolve_address);
// Returns whether the RenderFrameHost specified by the given IDs currently
- // has a pending transition request. If so, we will have to delay the
+ // has any pending transition request data. If so, we will have to delay the
// response until the embedder resumes the request.
- bool HasPendingTransitionRequest(int process_id, int render_frame_id);
-
- // Sets whether the RenderFrameHost specified by the given IDs currently has a
- // pending transition request.
- CONTENT_EXPORT void SetHasPendingTransitionRequest(int process_id,
- int render_frame_id,
- bool has_pending);
+ bool HasPendingTransitionRequest(int render_process_id,
+ int render_frame_id,
+ const GURL& request_url,
+ TransitionLayerData* transition_data);
+
+ // Adds pending request data for a transition navigation for the
+ // RenderFrameHost specified by the given IDs.
+ CONTENT_EXPORT void AddPendingTransitionRequestData(
+ int render_process_id,
+ int render_frame_id,
+ const std::string& allowed_destination_host_pattern,
+ const std::string& css_selector,
+ const std::string& markup);
+
+ void ClearPendingTransitionRequestData(int render_process_id,
+ int render_frame_id);
private:
+ class TransitionRequestData {
+ public:
+ TransitionRequestData();
+ ~TransitionRequestData();
+ void AddEntry(const std::string& allowed_destination_host_pattern,
+ const std::string& selector,
+ const std::string& markup);
+ bool FindEntry(const GURL& request_url,
+ TransitionLayerData* transition_data);
+
+ private:
+ struct AllowedEntry {
+ // These strings could have originated from a compromised renderer,
+ // and should not be trusted or assumed safe. They are only used within
+ // a sandboxed iframe with scripts disabled.
+ std::string allowed_destination_host_pattern;
+ std::string css_selector;
+ std::string markup;
+
+ AllowedEntry(const std::string& allowed_destination_host_pattern,
+ const std::string& css_selector,
+ const std::string& markup) :
+ allowed_destination_host_pattern(allowed_destination_host_pattern),
+ css_selector(css_selector),
+ markup(markup) {}
+ };
+ std::vector<AllowedEntry> allowed_entries_;
+ };
+
friend struct DefaultSingletonTraits<TransitionRequestManager>;
- typedef std::set<std::pair<int, int> > RenderFrameSet;
+ typedef std::map<std::pair<int, int>, TransitionRequestData>
+ RenderFrameRequestDataMap;
TransitionRequestManager();
~TransitionRequestManager();
- // Set of (render_process_host_id, render_frame_id) pairs of all
- // RenderFrameHosts that have pending transition requests. Used to pass
- // information to the CrossSiteResourceHandler without doing a round-trip
- // between IO->UI->IO threads.
- RenderFrameSet pending_transition_frames_;
+ // Map of (render_process_host_id, render_frame_id) pairs of all
+ // RenderFrameHosts that have pending cross-site requests and their data.
+ // Used to pass information to the CrossSiteResourceHandler without doing a
+ // round-trip between IO->UI->IO threads.
+ RenderFrameRequestDataMap pending_transition_frames_;
DISALLOW_COPY_AND_ASSIGN(TransitionRequestManager);
};
« no previous file with comments | « content/browser/transition_browsertest.cc ('k') | content/browser/transition_request_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698