blob: 188c2e9d68c0925b25894349d12c25de3abf830d [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/renderer/extension_web_view_helper.h"
#include <set>
#include "base/no_destructor.h"
namespace extensions {
namespace {
using ExtensionWebViewHelperSet = std::set<const ExtensionWebViewHelper*>;
ExtensionWebViewHelperSet* GetWebViewHelperSet() {
static base::NoDestructor<ExtensionWebViewHelperSet> web_view_helpers;
return web_view_helpers.get();
}
} // namespace
ExtensionWebViewHelper::ExtensionWebViewHelper(
blink::WebView* web_view,
const url::Origin* outermost_origin)
: blink::WebViewObserver(web_view) {
if (outermost_origin)
outermost_origin_ = *outermost_origin;
GetWebViewHelperSet()->insert(this);
}
ExtensionWebViewHelper::~ExtensionWebViewHelper() {
GetWebViewHelperSet()->erase(this);
}
const std::optional<url::Origin>& ExtensionWebViewHelper::GetOutermostOrigin()
const {
return outermost_origin_;
}
// static
const ExtensionWebViewHelper* ExtensionWebViewHelper::Get(
blink::WebView* web_view) {
for (const ExtensionWebViewHelper* target : *GetWebViewHelperSet()) {
if (target->GetWebView() == web_view)
return target;
}
return nullptr;
}
void ExtensionWebViewHelper::OnDestruct() {
delete this;
}
} // namespace extensions