15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef EXTENSIONS_BROWSER_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTION_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define EXTENSIONS_BROWSER_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTION_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/linked_ptr.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/ref_counted.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/declarative/declarative_rule.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/declarative_webrequest/request_stage.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/web_request/web_request_api_helpers.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/api/events.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestPermission; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Time; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extension_web_request_api_helpers { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct EventResponseDelta; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class InfoMap; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRequestData; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace re2 { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RE2; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef linked_ptr<extension_web_request_api_helpers::EventResponseDelta> 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LinkedPtrEventResponseDelta; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for all WebRequestActions of the declarative Web Request API. 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class WebRequestAction : public base::RefCounted<WebRequestAction> { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Type identifiers for concrete WebRequestActions. If you add a new type, 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // also update the unittest WebRequestActionTest.GetName, and add a 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // WebRequestActionWithThreadsTest.Permission* unittest. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_CANCEL_REQUEST, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_REDIRECT_REQUEST, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_REDIRECT_TO_TRANSPARENT_IMAGE, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_REDIRECT_TO_EMPTY_DOCUMENT, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_REDIRECT_BY_REGEX_DOCUMENT, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_SET_REQUEST_HEADER, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_REMOVE_REQUEST_HEADER, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_ADD_RESPONSE_HEADER, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_REMOVE_RESPONSE_HEADER, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_IGNORE_RULES, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_MODIFY_REQUEST_COOKIE, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACTION_MODIFY_RESPONSE_COOKIE, 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ACTION_SEND_MESSAGE_TO_EXTENSION, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Strategies for checking host permissions. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum HostPermissionsStrategy { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) STRATEGY_NONE, // Do not check host permissions. 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) STRATEGY_DEFAULT, // Check for host permissions for all URLs 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before creating the delta. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) STRATEGY_HOST, // Check that host permissions match the URL 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // of the request. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Information necessary to decide how to apply a WebRequestAction 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // inside a matching rule. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ApplyInfo { 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const InfoMap* extension_info_map; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool crosses_incognito; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Modified by each applied action: 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::list<LinkedPtrEventResponseDelta>* deltas; 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::set<std::string>* ignored_tags; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int stages() const { 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return stages_; 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Type type() const { 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return type_; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Compares the Type of two WebRequestActions, needs to be overridden for 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // parameterized types. 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const; 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Return the JavaScript type name corresponding to type(). If there are 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // more names, they are returned separated by a colon. 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const = 0; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int minimum_priority() const { 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return minimum_priority_; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HostPermissionsStrategy host_permissions_strategy() const { 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return host_permissions_strategy_; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether the specified extension has permission to execute this 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // action on |request|. Checks the host permission if the host permissions 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // strategy is STRATEGY_DEFAULT. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |extension_info_map| may only be NULL for during testing, in which case 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // host permissions are ignored. |crosses_incognito| specifies 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whether the request comes from a different profile than |extension_id| 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but was processed because the extension is in spanning mode. 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool HasPermission(const InfoMap* extension_info_map, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::URLRequest* request, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool crosses_incognito) const; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Factory method that instantiates a concrete WebRequestAction 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // implementation according to |json_action|, the representation of the 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebRequestAction as received from the extension API. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets |error| and returns NULL in case of a semantic error that cannot 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be caught by schema validation. Sets |bad_message| and returns NULL 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in case the input is syntactically unexpected. 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static scoped_refptr<const WebRequestAction> Create( 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserContext* browser_context, 1388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const Extension* extension, 13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::Value& json_action, 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string* error, 14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool* bad_message); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a description of the modification to the request caused by 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this action. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const = 0; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Applies this action to a request, recording the results into 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // apply_info.deltas. 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Apply(const std::string& extension_id, 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time extension_install_time, 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ApplyInfo* apply_info) const; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) friend class base::RefCounted<WebRequestAction>; 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestAction(); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebRequestAction(int stages, 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Type type, 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int minimum_priority, 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HostPermissionsStrategy strategy); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A bit vector representing a set of extensions::RequestStage during which 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the condition can be tested. 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int stages_; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Type type_; 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The minimum priority of rules that may be evaluated after the rule 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // containing this action. 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int minimum_priority_; 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Defaults to STRATEGY_DEFAULT. 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const HostPermissionsStrategy host_permissions_strategy_; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef DeclarativeActionSet<WebRequestAction> WebRequestActionSet; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following are concrete actions. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to cancel a network request. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestCancelAction : public WebRequestAction { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRequestCancelAction(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestCancelAction(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestCancelAction); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to redirect a network request. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRedirectAction : public WebRequestAction { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebRequestRedirectAction(const GURL& redirect_url); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRedirectAction(); 21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL redirect_url_; // Target to which the request shall be redirected. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectAction); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to redirect a network request to a transparent image. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRedirectToTransparentImageAction : public WebRequestAction { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRequestRedirectToTransparentImageAction(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRedirectToTransparentImageAction(); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToTransparentImageAction); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to redirect a network request to an empty document. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRequestRedirectToEmptyDocumentAction(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRedirectToEmptyDocumentAction(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToEmptyDocumentAction); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to redirect a network request. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRedirectByRegExAction : public WebRequestAction { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The |to_pattern| has to be passed in RE2 syntax with the exception that 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // capture groups are referenced in Perl style ($1, $2, ...). 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebRequestRedirectByRegExAction(scoped_ptr<re2::RE2> from_pattern, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& to_pattern); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Conversion of capture group styles between Perl style ($1, $2, ...) and 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RE2 (\1, \2, ...). 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string PerlToRe2Style(const std::string& perl); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 27190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 27290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 27990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRedirectByRegExAction(); 28090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<re2::RE2> from_pattern_; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string to_pattern_; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectByRegExAction); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to set a request header. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestSetRequestHeaderAction : public WebRequestAction { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRequestSetRequestHeaderAction(const std::string& name, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestSetRequestHeaderAction(); 30390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name_; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value_; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestSetRequestHeaderAction); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to remove a request header. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRemoveRequestHeaderAction : public WebRequestAction { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebRequestRemoveRequestHeaderAction(const std::string& name); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRemoveRequestHeaderAction(); 32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name_; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRemoveRequestHeaderAction); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to add a response header. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestAddResponseHeaderAction : public WebRequestAction { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRequestAddResponseHeaderAction(const std::string& name, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 33690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestAddResponseHeaderAction(); 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name_; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value_; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestAddResponseHeaderAction); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to remove a response header. 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRemoveResponseHeaderAction : public WebRequestAction { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebRequestRemoveResponseHeaderAction(const std::string& name, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_value); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 35990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 36790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRemoveResponseHeaderAction(); 36890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name_; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value_; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_value_; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRemoveResponseHeaderAction); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to ignore rules below a certain priority. 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestIgnoreRulesAction : public WebRequestAction { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit WebRequestIgnoreRulesAction(int minimum_priority, 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& ignore_tag); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 38290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 38390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& ignore_tag() const { return ignore_tag_; } 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 39190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestIgnoreRulesAction(); 39290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Rules are ignored if they have a tag matching |ignore_tag_| and 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |ignore_tag_| is non-empty. 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string ignore_tag_; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestIgnoreRulesAction); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to modify (add, edit, remove) a request cookie. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestRequestCookieAction : public WebRequestAction { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef extension_web_request_api_helpers::RequestCookieModification 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequestCookieModification; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebRequestRequestCookieAction( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<RequestCookieModification> request_cookie_modification); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 40990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 41090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 41790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestRequestCookieAction(); 41890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<RequestCookieModification> request_cookie_modification_; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestRequestCookieAction); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Action that instructs to modify (add, edit, remove) a response cookie. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebRequestResponseCookieAction : public WebRequestAction { 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef extension_web_request_api_helpers::ResponseCookieModification 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResponseCookieModification; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebRequestResponseCookieAction( 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<ResponseCookieModification> response_cookie_modification); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Implementation of WebRequestAction: 43390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 43490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 44190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestResponseCookieAction(); 44290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<ResponseCookieModification> response_cookie_modification_; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestResponseCookieAction); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Action that triggers the chrome.declarativeWebRequest.onMessage event in 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the background/event/... pages of the extension. 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebRequestSendMessageToExtensionAction : public WebRequestAction { 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit WebRequestSendMessageToExtensionAction(const std::string& message); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Implementation of WebRequestAction: 45490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool Equals(const WebRequestAction* other) const OVERRIDE; 45590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string GetName() const OVERRIDE; 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual LinkedPtrEventResponseDelta CreateDelta( 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebRequestData& request_data, 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id, 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time& extension_install_time) const OVERRIDE; 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 46290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~WebRequestSendMessageToExtensionAction(); 46390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string message_; 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebRequestSendMessageToExtensionAction); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // EXTENSIONS_BROWSER_API_DECLARATIVE_WEBREQUEST_WEBREQUEST_ACTION_H_ 471