Chromium Code Reviews| 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. |