blob: 404719feda75e1dce8687e492b06564aacd20095 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_CONTENT_CONTENT_ACTION_H_
#define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_CONTENT_CONTENT_ACTION_H_
#include <string>
#include <vector>
#include "base/memory/ref_counted.h"
#include "chrome/browser/extensions/api/declarative/declarative_rule.h"
class Profile;
namespace base {
class Time;
class Value;
}
namespace content {
class WebContents;
}
namespace extensions {
class Extension;
// Base class for all ContentActions of the declarative content API.
class ContentAction : public base::RefCounted<ContentAction> {
public:
// Type identifiers for concrete ContentActions.
enum Type {
ACTION_SHOW_PAGE_ACTION,
};
struct ApplyInfo {
Profile* profile;
content::WebContents* tab;
};
ContentAction();
virtual Type GetType() const = 0;
// Applies or reverts this ContentAction on a particular tab for a particular
// extension. Revert exists to keep the actions up to date as the page
// changes.
virtual void Apply(const std::string& extension_id,
const base::Time& extension_install_time,
ApplyInfo* apply_info) const = 0;
virtual void Revert(const std::string& extension_id,
const base::Time& extension_install_time,
ApplyInfo* apply_info) const = 0;
// Factory method that instantiates a concrete ContentAction
// implementation according to |json_action|, the representation of the
// ContentAction as received from the extension API.
// Sets |error| and returns NULL in case of a semantic error that cannot
// be caught by schema validation. Sets |bad_message| and returns NULL
// in case the input is syntactically unexpected.
static scoped_refptr<ContentAction> Create(const Extension* extension,
const base::Value& json_action,
std::string* error,
bool* bad_message);
protected:
friend class base::RefCounted<ContentAction>;
virtual ~ContentAction();
};
typedef DeclarativeActionSet<ContentAction> ContentActionSet;
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_CONTENT_CONTENT_ACTION_H_