Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / extensions / common / extension.cc
index 39f2fb7..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 "extensions/common/url_pattern.h"
 #include "net/base/filename_util.h"
 #include "url/url_util.h"
 
@@ -67,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 =
@@ -139,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;
@@ -281,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 {
@@ -331,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 {
@@ -421,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 {
@@ -440,6 +430,14 @@ 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;
@@ -453,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,
@@ -539,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)) {
@@ -551,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;
 }
@@ -768,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(