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