Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / extensions / common / extension.cc
index df6ea04..eb912e9 100644 (file)
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/manifest_handler.h"
-#include "extensions/common/permissions/api_permission_set.h"
+#include "extensions/common/manifest_handlers/permissions_parser.h"
 #include "extensions/common/permissions/permission_set.h"
 #include "extensions/common/permissions/permissions_data.h"
 #include "extensions/common/permissions/permissions_info.h"
 #include "extensions/common/switches.h"
-#include "extensions/common/url_pattern_set.h"
-#include "grit/chromium_strings.h"
-#include "net/base/net_util.h"
+#include "extensions/common/url_pattern.h"
+#include "net/base/filename_util.h"
 #include "url/url_util.h"
 
-#if defined(OS_WIN)
-#include "grit/generated_resources.h"
-#endif
-
 namespace extensions {
 
 namespace keys = manifest_keys;
@@ -72,6 +67,8 @@ bool ContainsReservedCharacters(const base::FilePath& path) {
 
 }  // namespace
 
+const int Extension::kInitFromValueFlagBits = 12;
+
 const char Extension::kMimeType[] = "application/x-chrome-extension";
 
 const int Extension::kValidWebExtentSchemes =
@@ -144,7 +141,7 @@ bool Extension::IdIsValid(const std::string& id) {
 
   // We only support lowercase IDs, because IDs can be used as URL components
   // (where GURL will lowercase it).
-  std::string temp = StringToLowerASCII(id);
+  std::string temp = base::StringToLowerASCII(id);
   for (size_t i = 0; i < temp.size(); i++)
     if (temp[i] < 'a' || temp[i] > 'p')
       return false;
@@ -224,7 +221,7 @@ bool Extension::ParsePEMKeyBytes(const std::string& input,
 
   std::string working = input;
   if (StartsWithASCII(working, kKeyBeginHeaderMarker, true)) {
-    working = CollapseWhitespaceASCII(working, true);
+    working = base::CollapseWhitespaceASCII(working, true);
     size_t header_pos = working.find(kKeyInfoEndMarker,
       sizeof(kKeyBeginHeaderMarker) - 1);
     if (header_pos == std::string::npos)
@@ -286,19 +283,7 @@ bool Extension::FormatPEMForFileOutput(const std::string& input,
 // static
 GURL Extension::GetBaseURLFromExtensionId(const std::string& extension_id) {
   return GURL(std::string(extensions::kExtensionScheme) +
-              content::kStandardSchemeSeparator + extension_id + "/");
-}
-
-bool Extension::HasAPIPermission(APIPermission::ID permission) const {
-  return PermissionsData::HasAPIPermission(this, permission);
-}
-
-bool Extension::HasAPIPermission(const std::string& permission_name) const {
-  return PermissionsData::HasAPIPermission(this, permission_name);
-}
-
-scoped_refptr<const PermissionSet> Extension::GetActivePermissions() const {
-  return PermissionsData::GetActivePermissions(this);
+              url::kStandardSchemeSeparator + extension_id + "/");
 }
 
 bool Extension::ShowConfigureContextMenus() const {
@@ -336,12 +321,12 @@ bool Extension::RequiresSortOrdinal() const {
 
 bool Extension::ShouldDisplayInAppLauncher() const {
   // Only apps should be displayed in the launcher.
-  return is_app() && display_in_launcher_ && !is_ephemeral();
+  return is_app() && display_in_launcher_;
 }
 
 bool Extension::ShouldDisplayInNewTabPage() const {
   // Only apps should be displayed on the NTP.
-  return is_app() && display_in_new_tab_page_ && !is_ephemeral();
+  return is_app() && display_in_new_tab_page_;
 }
 
 bool Extension::ShouldDisplayInExtensionSettings() const {
@@ -426,11 +411,11 @@ void Extension::AddInstallWarnings(
 }
 
 bool Extension::is_app() const {
-  return manifest_->is_app();
+  return manifest()->is_app();
 }
 
 bool Extension::is_platform_app() const {
-  return manifest_->is_platform_app();
+  return manifest()->is_platform_app();
 }
 
 bool Extension::is_hosted_app() const {
@@ -445,15 +430,19 @@ bool Extension::is_extension() const {
   return manifest()->is_extension();
 }
 
+bool Extension::is_shared_module() const {
+  return manifest()->is_shared_module();
+}
+
+bool Extension::is_theme() const {
+  return manifest()->is_theme();
+}
+
 bool Extension::can_be_incognito_enabled() const {
   // Only component platform apps are supported in incognito.
   return !is_platform_app() || location() == Manifest::COMPONENT;
 }
 
-bool Extension::force_incognito_enabled() const {
-  return PermissionsData::HasAPIPermission(this, APIPermission::kProxy);
-}
-
 void Extension::AddWebExtentPattern(const URLPattern& pattern) {
   // Bookmark apps are permissionless.
   if (from_bookmark())
@@ -462,10 +451,6 @@ void Extension::AddWebExtentPattern(const URLPattern& pattern) {
   extent_.AddPattern(pattern);
 }
 
-bool Extension::is_theme() const {
-  return manifest()->is_theme();
-}
-
 // static
 bool Extension::InitExtensionID(extensions::Manifest* manifest,
                                 const base::FilePath& path,
@@ -548,8 +533,8 @@ bool Extension::InitFromValue(int flags, base::string16* error) {
   if (is_app() && !LoadAppFeatures(error))
     return false;
 
-  permissions_data_.reset(new PermissionsData);
-  if (!permissions_data_->ParsePermissions(this, error))
+  permissions_parser_.reset(new PermissionsParser());
+  if (!permissions_parser_->Parse(this, error))
     return false;
 
   if (manifest_->HasKey(keys::kConvertedFromUserScript)) {
@@ -560,10 +545,12 @@ bool Extension::InitFromValue(int flags, base::string16* error) {
   if (!LoadSharedFeatures(error))
     return false;
 
+  permissions_parser_->Finalize(this);
+  permissions_parser_.reset();
+
   finished_parsing_manifest_ = true;
 
-  permissions_data_->InitializeManifestPermissions(this);
-  permissions_data_->FinalizePermissions(this);
+  permissions_data_.reset(new PermissionsData(this));
 
   return true;
 }
@@ -777,9 +764,11 @@ ExtensionInfo::~ExtensionInfo() {}
 InstalledExtensionInfo::InstalledExtensionInfo(
     const Extension* extension,
     bool is_update,
+    bool from_ephemeral,
     const std::string& old_name)
     : extension(extension),
       is_update(is_update),
+      from_ephemeral(from_ephemeral),
       old_name(old_name) {}
 
 UnloadedExtensionInfo::UnloadedExtensionInfo(