| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_API_H_ | 5 #ifndef EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_API_H_ |
| 6 #define EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_API_H_ | 6 #define EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_API_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <list> | 10 #include <list> |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 class AuthChallengeInfo; | 50 class AuthChallengeInfo; |
| 51 class AuthCredentials; | 51 class AuthCredentials; |
| 52 class HttpRequestHeaders; | 52 class HttpRequestHeaders; |
| 53 class HttpResponseHeaders; | 53 class HttpResponseHeaders; |
| 54 class URLRequest; | 54 class URLRequest; |
| 55 } | 55 } |
| 56 | 56 |
| 57 namespace extensions { | 57 namespace extensions { |
| 58 | 58 |
| 59 class InfoMap; | 59 class InfoMap; |
| 60 class WebRequestEventDetails; |
| 60 class WebRequestRulesRegistry; | 61 class WebRequestRulesRegistry; |
| 61 class WebRequestEventRouterDelegate; | 62 class WebRequestEventRouterDelegate; |
| 62 | 63 |
| 63 // Support class for the WebRequest API. Lives on the UI thread. Most of the | 64 // Support class for the WebRequest API. Lives on the UI thread. Most of the |
| 64 // work is done by ExtensionWebRequestEventRouter below. This class observes | 65 // work is done by ExtensionWebRequestEventRouter below. This class observes |
| 65 // extensions::EventRouter to deal with event listeners. There is one instance | 66 // extensions::EventRouter to deal with event listeners. There is one instance |
| 66 // per BrowserContext which is shared with incognito. | 67 // per BrowserContext which is shared with incognito. |
| 67 class WebRequestAPI : public BrowserContextKeyedAPI, | 68 class WebRequestAPI : public BrowserContextKeyedAPI, |
| 68 public EventRouter::Observer { | 69 public EventRouter::Observer { |
| 69 public: | 70 public: |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 // an error message is provided, otherwise the error is internal (and | 121 // an error message is provided, otherwise the error is internal (and |
| 121 // unexpected). | 122 // unexpected). |
| 122 bool InitFromValue(const base::DictionaryValue& value, std::string* error); | 123 bool InitFromValue(const base::DictionaryValue& value, std::string* error); |
| 123 | 124 |
| 124 extensions::URLPatternSet urls; | 125 extensions::URLPatternSet urls; |
| 125 std::vector<content::ResourceType> types; | 126 std::vector<content::ResourceType> types; |
| 126 int tab_id; | 127 int tab_id; |
| 127 int window_id; | 128 int window_id; |
| 128 }; | 129 }; |
| 129 | 130 |
| 130 // Internal representation of the extraInfoSpec parameter on webRequest | |
| 131 // events, used to specify extra information to be included with network | |
| 132 // events. | |
| 133 struct ExtraInfoSpec { | |
| 134 enum Flags { | |
| 135 REQUEST_HEADERS = 1<<0, | |
| 136 RESPONSE_HEADERS = 1<<1, | |
| 137 BLOCKING = 1<<2, | |
| 138 ASYNC_BLOCKING = 1<<3, | |
| 139 REQUEST_BODY = 1<<4, | |
| 140 }; | |
| 141 | |
| 142 static bool InitFromValue(const base::ListValue& value, | |
| 143 int* extra_info_spec); | |
| 144 }; | |
| 145 | |
| 146 // Contains an extension's response to a blocking event. | 131 // Contains an extension's response to a blocking event. |
| 147 struct EventResponse { | 132 struct EventResponse { |
| 148 EventResponse(const std::string& extension_id, | 133 EventResponse(const std::string& extension_id, |
| 149 const base::Time& extension_install_time); | 134 const base::Time& extension_install_time); |
| 150 ~EventResponse(); | 135 ~EventResponse(); |
| 151 | 136 |
| 152 // ID of the extension that sent this response. | 137 // ID of the extension that sent this response. |
| 153 std::string extension_id; | 138 std::string extension_id; |
| 154 | 139 |
| 155 // The time that the extension was installed. Used for deciding order of | 140 // The time that the extension was installed. Used for deciding order of |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 using CrossBrowserContextMap = std::map<void*, std::pair<bool, void*>>; | 314 using CrossBrowserContextMap = std::map<void*, std::pair<bool, void*>>; |
| 330 using CallbacksForPageLoad = std::list<base::Closure>; | 315 using CallbacksForPageLoad = std::list<base::Closure>; |
| 331 | 316 |
| 332 ExtensionWebRequestEventRouter(); | 317 ExtensionWebRequestEventRouter(); |
| 333 ~ExtensionWebRequestEventRouter(); | 318 ~ExtensionWebRequestEventRouter(); |
| 334 | 319 |
| 335 // Ensures that future callbacks for |request| are ignored so that it can be | 320 // Ensures that future callbacks for |request| are ignored so that it can be |
| 336 // destroyed safely. | 321 // destroyed safely. |
| 337 void ClearPendingCallbacks(const net::URLRequest* request); | 322 void ClearPendingCallbacks(const net::URLRequest* request); |
| 338 | 323 |
| 339 bool DispatchEvent( | 324 bool DispatchEvent(void* browser_context, |
| 340 void* browser_context, | 325 net::URLRequest* request, |
| 341 net::URLRequest* request, | 326 const std::vector<const EventListener*>& listeners, |
| 342 const std::vector<const EventListener*>& listeners, | 327 scoped_ptr<WebRequestEventDetails> event_details); |
| 343 const base::ListValue& args); | |
| 344 | 328 |
| 345 void DispatchEventToListeners( | 329 void DispatchEventToListeners( |
| 346 void* browser_context, | 330 void* browser_context, |
| 347 scoped_ptr<std::vector<EventListener>> listeners, | 331 scoped_ptr<std::vector<EventListener>> listeners, |
| 348 base::DictionaryValue* dict, | 332 scoped_ptr<WebRequestEventDetails> event_details); |
| 349 int extension_api_frame_id, | |
| 350 int extension_api_parent_frame_id); | |
| 351 | 333 |
| 352 // Returns a list of event listeners that care about the given event, based | 334 // Returns a list of event listeners that care about the given event, based |
| 353 // on their filter parameters. |extra_info_spec| will contain the combined | 335 // on their filter parameters. |extra_info_spec| will contain the combined |
| 354 // set of extra_info_spec flags that every matching listener asked for. | 336 // set of extra_info_spec flags that every matching listener asked for. |
| 355 std::vector<const EventListener*> GetMatchingListeners( | 337 std::vector<const EventListener*> GetMatchingListeners( |
| 356 void* browser_context, | 338 void* browser_context, |
| 357 const extensions::InfoMap* extension_info_map, | 339 const extensions::InfoMap* extension_info_map, |
| 358 const std::string& event_name, | 340 const std::string& event_name, |
| 359 const net::URLRequest* request, | 341 const net::URLRequest* request, |
| 360 int* extra_info_spec); | 342 int* extra_info_spec); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 void SendMessages( | 409 void SendMessages( |
| 428 void* browser_context, const BlockedRequest& blocked_request); | 410 void* browser_context, const BlockedRequest& blocked_request); |
| 429 | 411 |
| 430 // Called when the RulesRegistry is ready to unblock a request that was | 412 // Called when the RulesRegistry is ready to unblock a request that was |
| 431 // waiting for said event. | 413 // waiting for said event. |
| 432 void OnRulesRegistryReady(void* browser_context, | 414 void OnRulesRegistryReady(void* browser_context, |
| 433 const std::string& event_name, | 415 const std::string& event_name, |
| 434 uint64_t request_id, | 416 uint64_t request_id, |
| 435 extensions::RequestStage request_stage); | 417 extensions::RequestStage request_stage); |
| 436 | 418 |
| 437 // Extracts from |request| information for the keys requestId, url, method, | 419 // Returns event details for a given request. |
| 438 // frameId, tabId, type, and timeStamp and writes these into |out| to be | 420 scoped_ptr<WebRequestEventDetails> CreateEventDetails( |
| 439 // passed on to extensions. | 421 const net::URLRequest* request, |
| 440 void ExtractRequestInfo(const net::URLRequest* request, | 422 int extra_info_spec); |
| 441 base::DictionaryValue* out); | |
| 442 | 423 |
| 443 // Sets the flag that |event_type| has been signaled for |request_id|. | 424 // Sets the flag that |event_type| has been signaled for |request_id|. |
| 444 // Returns the value of the flag before setting it. | 425 // Returns the value of the flag before setting it. |
| 445 bool GetAndSetSignaled(uint64_t request_id, EventTypes event_type); | 426 bool GetAndSetSignaled(uint64_t request_id, EventTypes event_type); |
| 446 | 427 |
| 447 // Clears the flag that |event_type| has been signaled for |request_id|. | 428 // Clears the flag that |event_type| has been signaled for |request_id|. |
| 448 void ClearSignaled(uint64_t request_id, EventTypes event_type); | 429 void ClearSignaled(uint64_t request_id, EventTypes event_type); |
| 449 | 430 |
| 450 // Returns whether |request| represents a top level window navigation. | 431 // Returns whether |request| represents a top level window navigation. |
| 451 bool IsPageLoad(const net::URLRequest* request) const; | 432 bool IsPageLoad(const net::URLRequest* request) const; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 extensions::QuotaLimitHeuristics* heuristics) const override; | 543 extensions::QuotaLimitHeuristics* heuristics) const override; |
| 563 // Handle quota exceeded gracefully: Only warn the user but still execute the | 544 // Handle quota exceeded gracefully: Only warn the user but still execute the |
| 564 // function. | 545 // function. |
| 565 void OnQuotaExceeded(const std::string& error) override; | 546 void OnQuotaExceeded(const std::string& error) override; |
| 566 bool RunSync() override; | 547 bool RunSync() override; |
| 567 }; | 548 }; |
| 568 | 549 |
| 569 } // namespace extensions | 550 } // namespace extensions |
| 570 | 551 |
| 571 #endif // EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_API_H_ | 552 #endif // EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_API_H_ |
| OLD | NEW |