1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/common/extensions/manifest_handlers/synthesize_browser_action_handler.h"
6
7#include "chrome/common/extensions/api/extension_action/action_info.h"
8#include "extensions/common/feature_switch.h"
9#include "extensions/common/manifest_constants.h"
10
11namespace extensions {
12
13SynthesizeBrowserActionHandler::SynthesizeBrowserActionHandler() {
14}
15
16SynthesizeBrowserActionHandler::~SynthesizeBrowserActionHandler() {
17}
18
19bool SynthesizeBrowserActionHandler::Parse(Extension* extension,
20                                           base::string16* error) {
21  if (!extensions::FeatureSwitch::extension_action_redesign()->IsEnabled())
22    return true;  // Do nothing.
23
24  if (extension->location() == Manifest::COMPONENT ||
25      extension->location() == Manifest::EXTERNAL_COMPONENT)
26    return true;  // Return no error (we're done).
27
28  if (extension->manifest()->HasKey(manifest_keys::kSynthesizeBrowserAction))
29    return false;  // This key is reserved, no extension should be using it.
30
31  if (!extension->manifest()->HasKey(manifest_keys::kBrowserAction) &&
32      !extension->manifest()->HasKey(manifest_keys::kPageAction))
33    ActionInfo::SetBrowserActionInfo(extension, new ActionInfo());
34  return true;
35}
36
37bool SynthesizeBrowserActionHandler::AlwaysParseForType(
38    Manifest::Type type) const {
39  return type == Manifest::TYPE_EXTENSION;
40}
41
42const std::vector<std::string> SynthesizeBrowserActionHandler::Keys() const {
43  return SingleKey(manifest_keys::kSynthesizeBrowserAction);
44}
45
46}  // namespace extensions
47