Commit 8cd4dc27 authored by Solomon Kinard's avatar Solomon Kinard Committed by Chromium LUCI CQ

[Extensions][web_accessible_resources] Assign dynamic ID.

Bug: 1133624
Change-Id: I71e50481f0d7942f6ce428e890742828bfe0699e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2500422
Commit-Queue: Solomon Kinard <solomonkinard@chromium.org>
Reviewed-by: default avatarAlex Gough <ajgo@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842599}
parent c434652d
...@@ -215,6 +215,8 @@ scoped_refptr<Extension> Extension::Create(const base::FilePath& path, ...@@ -215,6 +215,8 @@ scoped_refptr<Extension> Extension::Create(const base::FilePath& path,
return nullptr; return nullptr;
} }
extension->guid_ = base::GUID::GenerateRandomV4();
return extension; return extension;
} }
...@@ -398,6 +400,16 @@ void Extension::SetManifestData(const std::string& key, ...@@ -398,6 +400,16 @@ void Extension::SetManifestData(const std::string& key,
manifest_data_[key] = std::move(data); manifest_data_[key] = std::move(data);
} }
void Extension::SetGUID(const ExtensionGuid& guid) {
guid_ = base::GUID::ParseLowercase(guid);
DCHECK(guid_.is_valid());
}
const ExtensionGuid& Extension::guid() const {
DCHECK(guid_.is_valid());
return guid_.AsLowercaseString();
}
Manifest::Location Extension::location() const { Manifest::Location Extension::location() const {
return manifest_->location(); return manifest_->location();
} }
......
...@@ -13,11 +13,13 @@ ...@@ -13,11 +13,13 @@
#include "base/auto_reset.h" #include "base/auto_reset.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/guid.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "base/version.h" #include "base/version.h"
#include "extensions/buildflags/buildflags.h" #include "extensions/buildflags/buildflags.h"
#include "extensions/common/extension_guid.h"
#include "extensions/common/extension_id.h" #include "extensions/common/extension_id.h"
#include "extensions/common/extension_resource.h" #include "extensions/common/extension_resource.h"
#include "extensions/common/hashed_extension_id.h" #include "extensions/common/hashed_extension_id.h"
...@@ -254,6 +256,11 @@ class Extension : public base::RefCountedThreadSafe<Extension> { ...@@ -254,6 +256,11 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
void SetManifestData(const std::string& key, void SetManifestData(const std::string& key,
std::unique_ptr<ManifestData> data); std::unique_ptr<ManifestData> data);
// Sets the GUID for this extension. Note: this should *only* be used when
// duplicating an existing extension; otherwise, the GUID will be
// appropriately set during creation (ensuring uniqueness).
void SetGUID(const ExtensionGuid& guid);
// Accessors: // Accessors:
const base::FilePath& path() const { return path_; } const base::FilePath& path() const { return path_; }
...@@ -262,6 +269,7 @@ class Extension : public base::RefCountedThreadSafe<Extension> { ...@@ -262,6 +269,7 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
Manifest::Location location() const; Manifest::Location location() const;
const ExtensionId& id() const; const ExtensionId& id() const;
const HashedExtensionId& hashed_id() const; const HashedExtensionId& hashed_id() const;
const ExtensionGuid& guid() const;
const base::Version& version() const { return version_; } const base::Version& version() const { return version_; }
const std::string& version_name() const { return version_name_; } const std::string& version_name() const { return version_name_; }
std::string VersionString() const; std::string VersionString() const;
...@@ -466,6 +474,10 @@ class Extension : public base::RefCountedThreadSafe<Extension> { ...@@ -466,6 +474,10 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// The flags that were passed to InitFromValue. // The flags that were passed to InitFromValue.
int creation_flags_; int creation_flags_;
// A dynamic ID that can be used when referencing extension resources via URL
// instead of an extension ID.
base::GUID guid_;
DISALLOW_COPY_AND_ASSIGN(Extension); DISALLOW_COPY_AND_ASSIGN(Extension);
}; };
......
// Copyright 2021 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 EXTENSIONS_COMMON_EXTENSION_GUID_H_
#define EXTENSIONS_COMMON_EXTENSION_GUID_H_
#include <string>
namespace extensions {
// If valid, uniquely identifies an Extension using a generated GUID.
using ExtensionGuid = std::string;
} // namespace extensions
#endif // EXTENSIONS_COMMON_EXTENSION_GUID_H_
...@@ -79,7 +79,8 @@ ExtensionMsg_Loaded_Params::ExtensionMsg_Loaded_Params( ...@@ -79,7 +79,8 @@ ExtensionMsg_Loaded_Params::ExtensionMsg_Loaded_Params(
extension->permissions_data()->UsesDefaultPolicyHostRestrictions()), extension->permissions_data()->UsesDefaultPolicyHostRestrictions()),
id(extension->id()), id(extension->id()),
worker_activation_sequence(worker_activation_sequence), worker_activation_sequence(worker_activation_sequence),
creation_flags(extension->creation_flags()) { creation_flags(extension->creation_flags()),
guid(extension->guid()) {
if (include_tab_permissions) { if (include_tab_permissions) {
for (const auto& pair : for (const auto& pair :
extension->permissions_data()->tab_specific_permissions()) { extension->permissions_data()->tab_specific_permissions()) {
...@@ -117,6 +118,7 @@ scoped_refptr<Extension> ExtensionMsg_Loaded_Params::ConvertToExtension( ...@@ -117,6 +118,7 @@ scoped_refptr<Extension> ExtensionMsg_Loaded_Params::ConvertToExtension(
permissions_data->UpdateTabSpecificPermissions( permissions_data->UpdateTabSpecificPermissions(
pair.first, *pair.second.ToPermissionSet()); pair.first, *pair.second.ToPermissionSet());
} }
extension->SetGUID(guid);
} }
return extension; return extension;
} }
...@@ -332,6 +334,7 @@ void ParamTraits<ExtensionMsg_Loaded_Params>::Write(base::Pickle* m, ...@@ -332,6 +334,7 @@ void ParamTraits<ExtensionMsg_Loaded_Params>::Write(base::Pickle* m,
WriteParam(m, p.policy_allowed_hosts); WriteParam(m, p.policy_allowed_hosts);
WriteParam(m, p.uses_default_policy_blocked_allowed_hosts); WriteParam(m, p.uses_default_policy_blocked_allowed_hosts);
WriteParam(m, p.worker_activation_sequence); WriteParam(m, p.worker_activation_sequence);
WriteParam(m, p.guid);
} }
bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m, bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m,
...@@ -347,7 +350,8 @@ bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m, ...@@ -347,7 +350,8 @@ bool ParamTraits<ExtensionMsg_Loaded_Params>::Read(const base::Pickle* m,
ReadParam(m, iter, &p->policy_blocked_hosts) && ReadParam(m, iter, &p->policy_blocked_hosts) &&
ReadParam(m, iter, &p->policy_allowed_hosts) && ReadParam(m, iter, &p->policy_allowed_hosts) &&
ReadParam(m, iter, &p->uses_default_policy_blocked_allowed_hosts) && ReadParam(m, iter, &p->uses_default_policy_blocked_allowed_hosts) &&
ReadParam(m, iter, &p->worker_activation_sequence); ReadParam(m, iter, &p->worker_activation_sequence) &&
ReadParam(m, iter, &p->guid);
} }
void ParamTraits<ExtensionMsg_Loaded_Params>::Log(const param_type& p, void ParamTraits<ExtensionMsg_Loaded_Params>::Log(const param_type& p,
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "extensions/common/draggable_region.h" #include "extensions/common/draggable_region.h"
#include "extensions/common/event_filtering_info.h" #include "extensions/common/event_filtering_info.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_guid.h"
#include "extensions/common/extensions_client.h" #include "extensions/common/extensions_client.h"
#include "extensions/common/host_id.h" #include "extensions/common/host_id.h"
#include "extensions/common/message_bundle.h" #include "extensions/common/message_bundle.h"
...@@ -406,6 +407,9 @@ struct ExtensionMsg_Loaded_Params { ...@@ -406,6 +407,9 @@ struct ExtensionMsg_Loaded_Params {
// Send creation flags so extension is initialized identically. // Send creation flags so extension is initialized identically.
int creation_flags; int creation_flags;
// Reuse the extension guid when creating the extension in the renderer.
extensions::ExtensionGuid guid;
private: private:
DISALLOW_COPY_AND_ASSIGN(ExtensionMsg_Loaded_Params); DISALLOW_COPY_AND_ASSIGN(ExtensionMsg_Loaded_Params);
}; };
......
...@@ -2,10 +2,11 @@ ...@@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "extensions/common/extension_messages.h"
#include "components/crx_file/id_util.h" #include "components/crx_file/id_util.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h" #include "extensions/common/extension_builder.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/manifest_handlers/permissions_parser.h" #include "extensions/common/manifest_handlers/permissions_parser.h"
#include "extensions/common/permissions/extensions_api_permissions.h" #include "extensions/common/permissions/extensions_api_permissions.h"
#include "extensions/common/permissions/permissions_data.h" #include "extensions/common/permissions/permissions_data.h"
...@@ -83,6 +84,7 @@ TEST(ExtensionMessageTypesTest, TestLoadedParams) { ...@@ -83,6 +84,7 @@ TEST(ExtensionMessageTypesTest, TestLoadedParams) {
ExtensionMsg_Loaded_Params params_in(extension.get(), true, base::nullopt); ExtensionMsg_Loaded_Params params_in(extension.get(), true, base::nullopt);
EXPECT_EQ(extension->id(), params_in.id); EXPECT_EQ(extension->id(), params_in.id);
EXPECT_EQ(extension->guid(), params_in.guid);
{ {
// First, test just converting back to an extension. // First, test just converting back to an extension.
...@@ -122,6 +124,9 @@ TEST(ExtensionMessageTypesTest, TestLoadedParams) { ...@@ -122,6 +124,9 @@ TEST(ExtensionMessageTypesTest, TestLoadedParams) {
EXPECT_TRUE(error.empty()); EXPECT_TRUE(error.empty());
ASSERT_TRUE(extension_out); ASSERT_TRUE(extension_out);
CompareExtension(*extension, *extension_out); CompareExtension(*extension, *extension_out);
// Check for guid in converted extension.
EXPECT_EQ(extension->guid(), extension_out->guid());
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment