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,
return nullptr;
}
extension->guid_ = base::GUID::GenerateRandomV4();
return extension;
}
......@@ -398,6 +400,16 @@ void Extension::SetManifestData(const std::string& key,
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 {
return manifest_->location();
}
......
......@@ -13,11 +13,13 @@
#include "base/auto_reset.h"
#include "base/files/file_path.h"
#include "base/guid.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/threading/thread_checker.h"
#include "base/version.h"
#include "extensions/buildflags/buildflags.h"
#include "extensions/common/extension_guid.h"
#include "extensions/common/extension_id.h"
#include "extensions/common/extension_resource.h"
#include "extensions/common/hashed_extension_id.h"
......@@ -254,6 +256,11 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
void SetManifestData(const std::string& key,
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:
const base::FilePath& path() const { return path_; }
......@@ -262,6 +269,7 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
Manifest::Location location() const;
const ExtensionId& id() const;
const HashedExtensionId& hashed_id() const;
const ExtensionGuid& guid() const;
const base::Version& version() const { return version_; }
const std::string& version_name() const { return version_name_; }
std::string VersionString() const;
......@@ -466,6 +474,10 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// The flags that were passed to InitFromValue.
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);
};
......
// 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(
extension->permissions_data()->UsesDefaultPolicyHostRestrictions()),
id(extension->id()),
worker_activation_sequence(worker_activation_sequence),
creation_flags(extension->creation_flags()) {
creation_flags(extension->creation_flags()),
guid(extension->guid()) {
if (include_tab_permissions) {
for (const auto& pair :
extension->permissions_data()->tab_specific_permissions()) {
......@@ -117,6 +118,7 @@ scoped_refptr<Extension> ExtensionMsg_Loaded_Params::ConvertToExtension(
permissions_data->UpdateTabSpecificPermissions(
pair.first, *pair.second.ToPermissionSet());
}
extension->SetGUID(guid);
}
return extension;
}
......@@ -332,6 +334,7 @@ void ParamTraits<ExtensionMsg_Loaded_Params>::Write(base::Pickle* m,
WriteParam(m, p.policy_allowed_hosts);
WriteParam(m, p.uses_default_policy_blocked_allowed_hosts);
WriteParam(m, p.worker_activation_sequence);
WriteParam(m, p.guid);
}
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_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,
......
......@@ -30,6 +30,7 @@
#include "extensions/common/draggable_region.h"
#include "extensions/common/event_filtering_info.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_guid.h"
#include "extensions/common/extensions_client.h"
#include "extensions/common/host_id.h"
#include "extensions/common/message_bundle.h"
......@@ -406,6 +407,9 @@ struct ExtensionMsg_Loaded_Params {
// Send creation flags so extension is initialized identically.
int creation_flags;
// Reuse the extension guid when creating the extension in the renderer.
extensions::ExtensionGuid guid;
private:
DISALLOW_COPY_AND_ASSIGN(ExtensionMsg_Loaded_Params);
};
......
......@@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/common/extension_messages.h"
#include "components/crx_file/id_util.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/manifest_handlers/permissions_parser.h"
#include "extensions/common/permissions/extensions_api_permissions.h"
#include "extensions/common/permissions/permissions_data.h"
......@@ -83,6 +84,7 @@ TEST(ExtensionMessageTypesTest, TestLoadedParams) {
ExtensionMsg_Loaded_Params params_in(extension.get(), true, base::nullopt);
EXPECT_EQ(extension->id(), params_in.id);
EXPECT_EQ(extension->guid(), params_in.guid);
{
// First, test just converting back to an extension.
......@@ -122,6 +124,9 @@ TEST(ExtensionMessageTypesTest, TestLoadedParams) {
EXPECT_TRUE(error.empty());
ASSERT_TRUE(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