1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // 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.
- #include "components/webapps/renderer/web_page_metadata_agent.h"
- #include <stddef.h>
- #include <utility>
- #include "base/bind.h"
- #include "components/webapps/common/constants.h"
- #include "components/webapps/common/web_page_metadata.mojom.h"
- #include "components/webapps/renderer/web_page_metadata_extraction.h"
- #include "content/public/renderer/render_frame.h"
- #include "services/service_manager/public/cpp/binder_registry.h"
- #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
- #include "third_party/blink/public/web/web_console_message.h"
- #include "third_party/blink/public/web/web_local_frame.h"
- namespace webapps {
- WebPageMetadataAgent::WebPageMetadataAgent(content::RenderFrame* render_frame)
- : content::RenderFrameObserver(render_frame) {
- render_frame->GetAssociatedInterfaceRegistry()
- ->AddInterface<mojom::WebPageMetadataAgent>(base::BindRepeating(
- &WebPageMetadataAgent::OnRenderFrameObserverRequest,
- base::Unretained(this)));
- }
- WebPageMetadataAgent::~WebPageMetadataAgent() = default;
- void WebPageMetadataAgent::OnInterfaceRequestForFrame(
- const std::string& interface_name,
- mojo::ScopedMessagePipeHandle* interface_pipe) {
- registry_.TryBindInterface(interface_name, interface_pipe);
- }
- void WebPageMetadataAgent::OnDestruct() {
- delete this;
- }
- void WebPageMetadataAgent::GetWebPageMetadata(
- GetWebPageMetadataCallback callback) {
- blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
- mojom::WebPageMetadataPtr web_page_metadata = ExtractWebPageMetadata(frame);
- // The warning below is specific to mobile but it doesn't hurt to show it even
- // if the Chromium build is running on a desktop. It will get more exposition.
- if (web_page_metadata->mobile_capable ==
- mojom::WebPageMobileCapable::ENABLED_APPLE) {
- blink::WebConsoleMessage message(
- blink::mojom::ConsoleMessageLevel::kWarning,
- "<meta name=\"apple-mobile-web-app-capable\" content=\"yes\"> is "
- "deprecated. Please include <meta name=\"mobile-web-app-capable\" "
- "content=\"yes\">");
- frame->AddMessageToConsole(message);
- }
- // Prune out any data URLs in the set of icons. The browser process expects
- // any icon with a data URL to have originated from a favicon. We don't want
- // to decode arbitrary data URLs in the browser process. See
- // http://b/issue?id=1162972
- for (auto it = web_page_metadata->icons.begin();
- it != web_page_metadata->icons.end();) {
- if ((*it)->url.SchemeIs(url::kDataScheme))
- it = web_page_metadata->icons.erase(it);
- else
- ++it;
- }
- // Truncate the strings we send to the browser process.
- web_page_metadata->application_name =
- web_page_metadata->application_name.substr(0, kMaxMetaTagAttributeLength);
- web_page_metadata->description =
- web_page_metadata->description.substr(0, kMaxMetaTagAttributeLength);
- std::move(callback).Run(std::move(web_page_metadata));
- }
- void WebPageMetadataAgent::OnRenderFrameObserverRequest(
- mojo::PendingAssociatedReceiver<mojom::WebPageMetadataAgent> receiver) {
- receivers_.Add(this, std::move(receiver));
- }
- } // namespace webapps
|