Index: content/browser/browsing_data/clear_site_data_throttle.h |
diff --git a/content/browser/browsing_data/clear_site_data_throttle.h b/content/browser/browsing_data/clear_site_data_throttle.h |
index ec26b7a7578d1359f17f132caad7f2d7944aad60..dc7469dcbf5b83edac0f818011296e97fb48a7ff 100644 |
--- a/content/browser/browsing_data/clear_site_data_throttle.h |
+++ b/content/browser/browsing_data/clear_site_data_throttle.h |
@@ -6,77 +6,120 @@ |
#define CONTENT_BROWSER_BROWSING_DATA_CLEAR_SITE_DATA_THROTTLE_H_ |
#include <memory> |
+#include <string> |
#include <vector> |
#include "base/gtest_prod_util.h" |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
-#include "base/values.h" |
-#include "content/public/browser/navigation_throttle.h" |
+#include "base/time/time.h" |
#include "content/public/browser/resource_request_info.h" |
+#include "content/public/browser/resource_throttle.h" |
#include "content/public/common/console_message_level.h" |
+#include "net/http/http_response_headers.h" |
#include "url/gurl.h" |
-namespace content { |
+namespace net { |
+class HttpResponseHeaders; |
+struct RedirectInfo; |
+class URLRequest; |
+} |
+ |
+namespace url { |
+class Origin; |
+} |
-class NavigationHandle; |
+namespace content { |
// This throttle parses the Clear-Site-Data header and executes the clearing |
-// of browsing data. The navigation is delayed until the header is parsed and, |
-// if valid, until the browsing data are deleted. See the W3C working draft at |
-// https://www.w3.org/TR/clear-site-data/. |
-class CONTENT_EXPORT ClearSiteDataThrottle : public NavigationThrottle { |
+// of browsing data. The resource load is delayed until the header is parsed |
+// and, if valid, until the browsing data are deleted. See the W3C working draft |
+// at https://www.w3.org/TR/clear-site-data/. |
falken
2017/05/17 07:37:00
Typically Chrome web platform implementation work
msramek
2017/05/17 13:46:37
Good point. Updated.
|
+class CONTENT_EXPORT ClearSiteDataThrottle : public ResourceThrottle { |
public: |
- struct ConsoleMessage { |
- GURL url; |
- std::string text; |
- ConsoleMessageLevel level; |
+ // Stores and outputs console messages. |
+ class ConsoleMessagesDelegate { |
+ public: |
+ struct Message { |
+ GURL url; |
+ std::string text; |
+ ConsoleMessageLevel level; |
+ }; |
+ |
+ ConsoleMessagesDelegate(); |
+ virtual ~ConsoleMessagesDelegate(); |
+ |
+ // Logs a |text| message from |url| with |level|. |
+ virtual void AddMessage(const GURL& url, |
+ const std::string& text, |
+ ConsoleMessageLevel level); |
+ |
+ // Outputs stored messages to the console of WebContents identified by |
+ // |web_contents_getter|. |
+ virtual void OutputMessages( |
+ const ResourceRequestInfo::WebContentsGetter& web_contents_getter); |
+ |
+ const std::vector<Message>& messages() const { return messages_; } |
+ |
+ private: |
+ std::vector<Message> messages_; |
}; |
- static std::unique_ptr<NavigationThrottle> CreateThrottleForNavigation( |
- NavigationHandle* handle); |
+ // Instantiates a throttle for the given |request|. The caller must |
+ // guarantee that |request| outlives the throttle. |
+ static std::unique_ptr<ResourceThrottle> CreateThrottleForRequest( |
+ net::URLRequest* request); |
~ClearSiteDataThrottle() override; |
- // NavigationThrottle implementation: |
- ThrottleCheckResult WillStartRequest() override; |
- ThrottleCheckResult WillRedirectRequest() override; |
- ThrottleCheckResult WillProcessResponse() override; |
- const char* GetNameForLogging() override; |
- |
- private: |
- friend class ClearSiteDataFuzzerTest; |
- friend class ClearSiteDataThrottleTest; |
- FRIEND_TEST_ALL_PREFIXES(ClearSiteDataThrottleTest, ParseHeader); |
- FRIEND_TEST_ALL_PREFIXES(ClearSiteDataThrottleTest, InvalidHeader); |
- |
- explicit ClearSiteDataThrottle(NavigationHandle* navigation_handle); |
- |
- // Scans for the first occurrence of the 'Clear-Site-Data' header, calls |
- // ParseHeader() to parse it, and requests the actual data clearing. This is |
- // the common logic of WillRedirectRequest() and WillProcessResponse(). |
- void HandleHeader(); |
+ // ResourceThrottle implementation: |
+ const char* GetNameForLogging() const override; |
+ void WillRedirectRequest(const net::RedirectInfo& redirect_info, |
+ bool* defer) override; |
+ void WillProcessResponse(bool* defer) override; |
// Parses the value of the 'Clear-Site-Data' header and outputs whether |
// the header requests to |clear_cookies|, |clear_storage|, and |clear_cache|. |
- // The |messages| vector will be filled with messages to be output in the |
- // console. Returns true if parsing was successful. |
- bool ParseHeader(const std::string& header, |
- bool* clear_cookies, |
- bool* clear_storage, |
- bool* clear_cache, |
- std::vector<ConsoleMessage>* messages); |
+ // The |delegate| will be filled with messages to be output in the console, |
+ // prepended by the |current_url|. Returns true if parsing was successful. |
+ static bool ParseHeader(const std::string& header, |
+ bool* clear_cookies, |
+ bool* clear_storage, |
+ bool* clear_cache, |
+ ConsoleMessagesDelegate* delegate, |
+ const GURL& current_url); |
+ |
+ protected: |
+ ClearSiteDataThrottle(net::URLRequest* request, |
+ std::unique_ptr<ConsoleMessagesDelegate> delegate); |
+ |
+ // Returns HTTP response headers of the underlying URLRequest. |
+ // Can be overriden for testing. |
+ virtual const net::HttpResponseHeaders* GetResponseHeaders() const; |
+ |
+ // Executes the clearing task. Can be overriden for testing. |
+ virtual void ExecuteClearingTask(const url::Origin& origin, |
+ bool clear_cookies, |
+ bool clear_storage, |
+ bool clear_cache, |
+ const base::Closure& callback); |
+ |
+ private: |
+ // Scans for the first occurrence of the 'Clear-Site-Data' header, calls |
+ // ParseHeader() to parse it, and then ExecuteClearingTask() if applicable. |
+ // This is the common logic of WillRedirectRequest() |
+ // and WillProcessResponse(). Returns true if a valid header was found and |
+ // the clearing was executed. |
+ bool HandleHeader(); |
// Signals that a parsing and deletion task was finished. |
void TaskFinished(); |
- // Cached console messages to be output when the RenderFrameHost is ready. |
- std::vector<ConsoleMessage> messages_; |
- GURL current_url_; |
+ // The request this throttle is observing. |
+ net::URLRequest* request_; |
- // Whether we are currently waiting for a callback that data clearing has |
- // been completed; |
- bool clearing_in_progress_; |
+ // The delegate that stores and outputs console messages. |
+ std::unique_ptr<ConsoleMessagesDelegate> delegate_; |
// The time when the last clearing operation started. Used when clearing |
// finishes to compute the duration. |