Commit 4d5eb678 authored by Darin Fisher's avatar Darin Fisher Committed by Commit Bot

Migrate ChromeViewHostMsg_OpenPDF to Mojo.

Bug: 993189
Change-Id: Ifa69e4e87910ad8be6caca11b6cc4e0c2e4180f6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2520170Reviewed-by: default avatarNicolas Ouellet-Payeur <nicolaso@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Darin Fisher <darin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825014}
parent ade40548
...@@ -1145,8 +1145,6 @@ static_library("browser") { ...@@ -1145,8 +1145,6 @@ static_library("browser") {
"platform_util_internal.h", "platform_util_internal.h",
"plugins/pdf_iframe_navigation_throttle.cc", "plugins/pdf_iframe_navigation_throttle.cc",
"plugins/pdf_iframe_navigation_throttle.h", "plugins/pdf_iframe_navigation_throttle.h",
"plugins/pdf_plugin_placeholder_observer.cc",
"plugins/pdf_plugin_placeholder_observer.h",
"policy/boolean_disabling_policy_handler.cc", "policy/boolean_disabling_policy_handler.cc",
"policy/boolean_disabling_policy_handler.h", "policy/boolean_disabling_policy_handler.h",
"policy/browsing_history_policy_handler.cc", "policy/browsing_history_policy_handler.cc",
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "chrome/browser/permissions/permission_manager_factory.h" #include "chrome/browser/permissions/permission_manager_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/common/buildflags.h" #include "chrome/common/buildflags.h"
#include "chrome/common/render_messages.h"
#include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_types.h"
#include "components/permissions/permission_manager.h" #include "components/permissions/permission_manager.h"
#include "components/permissions/permission_request_id.h" #include "components/permissions/permission_request_id.h"
...@@ -52,16 +51,6 @@ ChromeWebViewPermissionHelperDelegate::~ChromeWebViewPermissionHelperDelegate() ...@@ -52,16 +51,6 @@ ChromeWebViewPermissionHelperDelegate::~ChromeWebViewPermissionHelperDelegate()
{} {}
#if BUILDFLAG(ENABLE_PLUGINS) #if BUILDFLAG(ENABLE_PLUGINS)
bool ChromeWebViewPermissionHelperDelegate::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
IPC_BEGIN_MESSAGE_MAP(ChromeWebViewPermissionHelperDelegate, message)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_OpenPDF, OnOpenPDF)
IPC_MESSAGE_UNHANDLED(return false)
IPC_END_MESSAGE_MAP()
return true;
}
void ChromeWebViewPermissionHelperDelegate::BlockedUnauthorizedPlugin( void ChromeWebViewPermissionHelperDelegate::BlockedUnauthorizedPlugin(
const base::string16& name, const base::string16& name,
...@@ -94,10 +83,6 @@ void ChromeWebViewPermissionHelperDelegate::OnPermissionResponse( ...@@ -94,10 +83,6 @@ void ChromeWebViewPermissionHelperDelegate::OnPermissionResponse(
#endif // BUILDFLAG(ENABLE_PLUGINS) #endif // BUILDFLAG(ENABLE_PLUGINS)
void ChromeWebViewPermissionHelperDelegate::OnOpenPDF(const GURL& url) {
// Intentionally blank since guest views should never trigger PDF downloads.
}
void ChromeWebViewPermissionHelperDelegate::CanDownload( void ChromeWebViewPermissionHelperDelegate::CanDownload(
const GURL& url, const GURL& url,
const std::string& request_method, const std::string& request_method,
......
...@@ -51,11 +51,6 @@ class ChromeWebViewPermissionHelperDelegate ...@@ -51,11 +51,6 @@ class ChromeWebViewPermissionHelperDelegate
const GURL& url, const GURL& url,
bool allowed_by_default, bool allowed_by_default,
base::OnceCallback<void(bool)> callback) override; base::OnceCallback<void(bool)> callback) override;
#if BUILDFLAG(ENABLE_PLUGINS)
// content::WebContentsObserver implementation.
bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override;
#endif // BUILDFLAG(ENABLE_PLUGINS)
private: private:
#if BUILDFLAG(ENABLE_PLUGINS) #if BUILDFLAG(ENABLE_PLUGINS)
...@@ -71,8 +66,6 @@ class ChromeWebViewPermissionHelperDelegate ...@@ -71,8 +66,6 @@ class ChromeWebViewPermissionHelperDelegate
const std::string& user_input); const std::string& user_input);
#endif // BUILDFLAG(ENABLE_PLUGINS) #endif // BUILDFLAG(ENABLE_PLUGINS)
void OnOpenPDF(const GURL& url);
void OnGeolocationPermissionResponse( void OnGeolocationPermissionResponse(
int bridge_id, int bridge_id,
bool user_gesture, bool user_gesture,
......
// Copyright 2017 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 "chrome/browser/plugins/pdf_plugin_placeholder_observer.h"
#include <memory>
#include <utility>
#include "chrome/common/render_messages.h"
#include "components/download/public/common/download_url_parameters.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/download_manager.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "ppapi/buildflags/buildflags.h"
PDFPluginPlaceholderObserver::PDFPluginPlaceholderObserver(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents) {}
PDFPluginPlaceholderObserver::~PDFPluginPlaceholderObserver() {}
bool PDFPluginPlaceholderObserver::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(PDFPluginPlaceholderObserver, message,
render_frame_host)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_OpenPDF, OnOpenPDF)
IPC_MESSAGE_UNHANDLED(return false)
IPC_END_MESSAGE_MAP()
return true;
}
void PDFPluginPlaceholderObserver::OnOpenPDF(
content::RenderFrameHost* render_frame_host,
const GURL& url) {
if (!content::ChildProcessSecurityPolicy::GetInstance()->CanRequestURL(
render_frame_host->GetRoutingID(), url)) {
return;
}
content::Referrer referrer = content::Referrer::SanitizeForRequest(
url, content::Referrer(web_contents()->GetURL(),
network::mojom::ReferrerPolicy::kDefault));
#if BUILDFLAG(ENABLE_PLUGINS)
net::NetworkTrafficAnnotationTag traffic_annotation =
net::DefineNetworkTrafficAnnotation("pdf_plugin_placeholder", R"(
semantics {
sender: "PDF Plugin Placeholder"
description:
"When the PDF Viewer is unavailable, a placeholder is shown for "
"embedded PDFs. This placeholder allows the user to download and "
"open the PDF file via a button."
trigger:
"The user clicks the 'View PDF' button in the PDF placeholder."
data: "None."
destination: WEBSITE
}
policy {
cookies_allowed: NO
setting:
"This feature can be disabled via 'Download PDF files instead of "
"automatically opening them in Chrome' in settings under content. "
"The feature is disabled by default."
chrome_policy {
AlwaysOpenPdfExternally {
AlwaysOpenPdfExternally: false
}
}
})");
std::unique_ptr<download::DownloadUrlParameters> params =
std::make_unique<download::DownloadUrlParameters>(
url, render_frame_host->GetRenderViewHost()->GetProcess()->GetID(),
render_frame_host->GetRoutingID(), traffic_annotation);
params->set_referrer(referrer.url);
params->set_referrer_policy(
content::Referrer::ReferrerPolicyForUrlRequest(referrer.policy));
content::BrowserContext::GetDownloadManager(
web_contents()->GetBrowserContext())
->DownloadUrl(std::move(params));
#else // !BUILDFLAG(ENABLE_PLUGINS)
content::OpenURLParams open_url_params(
url, referrer, WindowOpenDisposition::CURRENT_TAB,
ui::PAGE_TRANSITION_AUTO_BOOKMARK, false);
// On Android, PDFs downloaded with a user gesture are auto-opened.
open_url_params.user_gesture = true;
web_contents()->OpenURL(open_url_params);
#endif // BUILDFLAG(ENABLE_PLUGINS)
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(PDFPluginPlaceholderObserver)
// Copyright 2017 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 CHROME_BROWSER_PLUGINS_PDF_PLUGIN_PLACEHOLDER_OBSERVER_H_
#define CHROME_BROWSER_PLUGINS_PDF_PLUGIN_PLACEHOLDER_OBSERVER_H_
#include "base/macros.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
// Separate class from PluginObserver, since PluginObserver is created only when
// ENABLE_PLUGINS is true. PDFPluginPlaceholderObserver should also run on
// Android, where ENABLE_PLUGINS is false.
class PDFPluginPlaceholderObserver
: public content::WebContentsObserver,
public content::WebContentsUserData<PDFPluginPlaceholderObserver> {
public:
~PDFPluginPlaceholderObserver() override;
// content::WebContentsObserver:
bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override;
private:
friend class content::WebContentsUserData<PDFPluginPlaceholderObserver>;
explicit PDFPluginPlaceholderObserver(content::WebContents* web_contents);
// Message handlers:
void OnOpenPDF(content::RenderFrameHost* render_frame_host, const GURL& url);
WEB_CONTENTS_USER_DATA_KEY_DECL();
DISALLOW_COPY_AND_ASSIGN(PDFPluginPlaceholderObserver);
};
#endif // CHROME_BROWSER_PLUGINS_PDF_PLUGIN_PLACEHOLDER_OBSERVER_H_
...@@ -28,16 +28,23 @@ ...@@ -28,16 +28,23 @@
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/component_updater/component_updater_service.h" #include "components/component_updater/component_updater_service.h"
#include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/download/public/common/download_url_parameters.h"
#include "components/infobars/core/simple_alert_infobar_delegate.h" #include "components/infobars/core/simple_alert_infobar_delegate.h"
#include "components/metrics_services_manager/metrics_services_manager.h" #include "components/metrics_services_manager/metrics_services_manager.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/download_manager.h"
#include "content/public/browser/plugin_service.h" #include "content/public/browser/plugin_service.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_delegate.h"
#include "content/public/common/webplugininfo.h" #include "content/public/common/webplugininfo.h"
#include "extensions/browser/guest_view/web_view/web_view_guest.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "ppapi/buildflags/buildflags.h"
#include "services/service_manager/public/cpp/interface_provider.h" #include "services/service_manager/public/cpp/interface_provider.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -251,4 +258,70 @@ void PluginObserver::CouldNotLoadPlugin(const base::FilePath& plugin_path) { ...@@ -251,4 +258,70 @@ void PluginObserver::CouldNotLoadPlugin(const base::FilePath& plugin_path) {
plugin_name); plugin_name);
} }
void PluginObserver::OpenPDF(const GURL& url) {
// WebViews should never trigger PDF downloads.
auto* guest_view = guest_view::GuestViewBase::FromWebContents(web_contents());
if (guest_view && guest_view->IsViewType(extensions::WebViewGuest::Type))
return;
content::RenderFrameHost* render_frame_host =
plugin_host_receivers_.GetCurrentTargetFrame();
if (!content::ChildProcessSecurityPolicy::GetInstance()->CanRequestURL(
render_frame_host->GetRoutingID(), url)) {
return;
}
content::Referrer referrer = content::Referrer::SanitizeForRequest(
url, content::Referrer(web_contents()->GetURL(),
network::mojom::ReferrerPolicy::kDefault));
#if BUILDFLAG(ENABLE_PLUGINS)
net::NetworkTrafficAnnotationTag traffic_annotation =
net::DefineNetworkTrafficAnnotation("pdf_plugin_placeholder", R"(
semantics {
sender: "PDF Plugin Placeholder"
description:
"When the PDF Viewer is unavailable, a placeholder is shown for "
"embedded PDFs. This placeholder allows the user to download and "
"open the PDF file via a button."
trigger:
"The user clicks the 'View PDF' button in the PDF placeholder."
data: "None."
destination: WEBSITE
}
policy {
cookies_allowed: NO
setting:
"This feature can be disabled via 'Download PDF files instead of "
"automatically opening them in Chrome' in settings under content. "
"The feature is disabled by default."
chrome_policy {
AlwaysOpenPdfExternally {
AlwaysOpenPdfExternally: false
}
}
})");
std::unique_ptr<download::DownloadUrlParameters> params =
std::make_unique<download::DownloadUrlParameters>(
url, render_frame_host->GetRenderViewHost()->GetProcess()->GetID(),
render_frame_host->GetRoutingID(), traffic_annotation);
params->set_referrer(referrer.url);
params->set_referrer_policy(
content::Referrer::ReferrerPolicyForUrlRequest(referrer.policy));
content::BrowserContext::GetDownloadManager(
web_contents()->GetBrowserContext())
->DownloadUrl(std::move(params));
#else // !BUILDFLAG(ENABLE_PLUGINS)
content::OpenURLParams open_url_params(
url, referrer, WindowOpenDisposition::CURRENT_TAB,
ui::PAGE_TRANSITION_AUTO_BOOKMARK, false);
// On Android, PDFs downloaded with a user gesture are auto-opened.
open_url_params.user_gesture = true;
web_contents()->OpenURL(open_url_params);
#endif // BUILDFLAG(ENABLE_PLUGINS)
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(PluginObserver) WEB_CONTENTS_USER_DATA_KEY_IMPL(PluginObserver)
...@@ -56,6 +56,7 @@ class PluginObserver : public content::WebContentsObserver, ...@@ -56,6 +56,7 @@ class PluginObserver : public content::WebContentsObserver,
const std::string& identifier) override; const std::string& identifier) override;
void ShowFlashPermissionBubble() override; void ShowFlashPermissionBubble() override;
void CouldNotLoadPlugin(const base::FilePath& plugin_path) override; void CouldNotLoadPlugin(const base::FilePath& plugin_path) override;
void OpenPDF(const GURL& url) override;
void RemovePluginPlaceholderHost(PluginPlaceholderHost* placeholder); void RemovePluginPlaceholderHost(PluginPlaceholderHost* placeholder);
void RemoveComponentObserver(ComponentObserver* component_observer); void RemoveComponentObserver(ComponentObserver* component_observer);
......
...@@ -47,7 +47,6 @@ ...@@ -47,7 +47,6 @@
#include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h"
#include "chrome/browser/performance_hints/performance_hints_features.h" #include "chrome/browser/performance_hints/performance_hints_features.h"
#include "chrome/browser/performance_hints/performance_hints_observer.h" #include "chrome/browser/performance_hints/performance_hints_observer.h"
#include "chrome/browser/plugins/pdf_plugin_placeholder_observer.h"
#include "chrome/browser/predictors/loading_predictor_factory.h" #include "chrome/browser/predictors/loading_predictor_factory.h"
#include "chrome/browser/predictors/loading_predictor_tab_helper.h" #include "chrome/browser/predictors/loading_predictor_tab_helper.h"
#include "chrome/browser/prefetch/no_state_prefetch/no_state_prefetch_tab_helper.h" #include "chrome/browser/prefetch/no_state_prefetch/no_state_prefetch_tab_helper.h"
...@@ -284,7 +283,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ...@@ -284,7 +283,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
} }
OutOfMemoryReporter::CreateForWebContents(web_contents); OutOfMemoryReporter::CreateForWebContents(web_contents);
chrome::InitializePageLoadMetricsForWebContents(web_contents); chrome::InitializePageLoadMetricsForWebContents(web_contents);
PDFPluginPlaceholderObserver::CreateForWebContents(web_contents);
if (performance_manager::PerformanceManager::IsAvailable()) if (performance_manager::PerformanceManager::IsAvailable())
performance_manager::TabPropertiesDecorator::SetIsTab(web_contents, true); performance_manager::TabPropertiesDecorator::SetIsTab(web_contents, true);
permissions::PermissionRequestManager::CreateForWebContents(web_contents); permissions::PermissionRequestManager::CreateForWebContents(web_contents);
......
...@@ -28,6 +28,9 @@ interface PluginHost { ...@@ -28,6 +28,9 @@ interface PluginHost {
BlockedComponentUpdatedPlugin(pending_remote<PluginRenderer> plugin_renderer, BlockedComponentUpdatedPlugin(pending_remote<PluginRenderer> plugin_renderer,
string group_id); string group_id);
// Tells the browser to open a PDF file. Used when no PDF Viewer is
// available, and the user clicks to view a PDF from the placeholder UI.
OpenPDF(url.mojom.Url url);
}; };
// Plugin messages sent from renderer to the host requiring user auth actions. // Plugin messages sent from renderer to the host requiring user auth actions.
......
...@@ -6,25 +6,5 @@ ...@@ -6,25 +6,5 @@
#define CHROME_COMMON_RENDER_MESSAGES_H_ #define CHROME_COMMON_RENDER_MESSAGES_H_
#include "chrome/common/web_application_info_provider_param_traits.h" #include "chrome/common/web_application_info_provider_param_traits.h"
#include "ipc/ipc_message_macros.h"
#include "url/gurl.h"
#include "url/ipc/url_param_traits.h"
// Singly-included section for enums and custom IPC traits.
#ifndef INTERNAL_CHROME_COMMON_RENDER_MESSAGES_H_
#define INTERNAL_CHROME_COMMON_RENDER_MESSAGES_H_
#endif // INTERNAL_CHROME_COMMON_RENDER_MESSAGES_H_
#define IPC_MESSAGE_START ChromeMsgStart
//-----------------------------------------------------------------------------
// Misc messages
// These are messages sent from the renderer to the browser process.
// Tells the browser to open a PDF file in a new tab. Used when no PDF Viewer is
// available, and user clicks to view PDF.
IPC_MESSAGE_ROUTED1(ChromeViewHostMsg_OpenPDF, GURL /* url */)
#endif // CHROME_COMMON_RENDER_MESSAGES_H_ #endif // CHROME_COMMON_RENDER_MESSAGES_H_
...@@ -6,10 +6,11 @@ ...@@ -6,10 +6,11 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "chrome/common/pdf_util.h" #include "chrome/common/pdf_util.h"
#include "chrome/common/render_messages.h" #include "chrome/common/plugin.mojom.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_frame.h"
#include "gin/object_template_builder.h" #include "gin/object_template_builder.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
gin::WrapperInfo PDFPluginPlaceholder::kWrapperInfo = {gin::kEmbedderNativeGin}; gin::WrapperInfo PDFPluginPlaceholder::kWrapperInfo = {gin::kEmbedderNativeGin};
...@@ -51,6 +52,8 @@ gin::ObjectTemplateBuilder PDFPluginPlaceholder::GetObjectTemplateBuilder( ...@@ -51,6 +52,8 @@ gin::ObjectTemplateBuilder PDFPluginPlaceholder::GetObjectTemplateBuilder(
void PDFPluginPlaceholder::OpenPDFCallback() { void PDFPluginPlaceholder::OpenPDFCallback() {
ReportPDFLoadStatus(PDFLoadStatus::kViewPdfClickedInPdfPluginPlaceholder); ReportPDFLoadStatus(PDFLoadStatus::kViewPdfClickedInPdfPluginPlaceholder);
content::RenderThread::Get()->Send( mojo::AssociatedRemote<chrome::mojom::PluginHost> plugin_host;
new ChromeViewHostMsg_OpenPDF(routing_id(), GetPluginParams().url)); render_frame()->GetRemoteAssociatedInterfaces()->GetInterface(
plugin_host.BindNewEndpointAndPassReceiver());
plugin_host->OpenPDF(GetPluginParams().url);
} }
...@@ -222,7 +222,7 @@ Refer to README.md for content description and update process. ...@@ -222,7 +222,7 @@ Refer to README.md for content description and update process.
<item id="payment_instrument_icon_fetcher" added_in_milestone="62" hash_code="73309970" type="0" deprecated="2017-09-16" content_hash_code="84709873" file_path=""/> <item id="payment_instrument_icon_fetcher" added_in_milestone="62" hash_code="73309970" type="0" deprecated="2017-09-16" content_hash_code="84709873" file_path=""/>
<item id="payment_manifest_downloader" added_in_milestone="62" hash_code="84045030" type="0" content_hash_code="19293316" os_list="linux,windows" file_path="components/payments/core/payment_manifest_downloader.cc"/> <item id="payment_manifest_downloader" added_in_milestone="62" hash_code="84045030" type="0" content_hash_code="19293316" os_list="linux,windows" file_path="components/payments/core/payment_manifest_downloader.cc"/>
<item id="payments_sync_cards" added_in_milestone="62" hash_code="95588446" type="0" content_hash_code="56526513" os_list="linux,windows" file_path="components/autofill/core/browser/payments/payments_client.cc"/> <item id="payments_sync_cards" added_in_milestone="62" hash_code="95588446" type="0" content_hash_code="56526513" os_list="linux,windows" file_path="components/autofill/core/browser/payments/payments_client.cc"/>
<item id="pdf_plugin_placeholder" added_in_milestone="63" hash_code="56866367" type="0" content_hash_code="16907221" os_list="linux,windows" file_path="chrome/browser/plugins/pdf_plugin_placeholder_observer.cc"/> <item id="pdf_plugin_placeholder" added_in_milestone="63" hash_code="56866367" type="0" content_hash_code="16907221" os_list="linux,windows" file_path="chrome/browser/plugins/plugin_observer.cc"/>
<item id="pepper_tcp_socket" added_in_milestone="65" hash_code="120623198" type="0" content_hash_code="27489892" os_list="linux,windows" file_path="content/browser/renderer_host/pepper/pepper_socket_utils.cc"/> <item id="pepper_tcp_socket" added_in_milestone="65" hash_code="120623198" type="0" content_hash_code="27489892" os_list="linux,windows" file_path="content/browser/renderer_host/pepper/pepper_socket_utils.cc"/>
<item id="pepper_udp_socket" added_in_milestone="70" hash_code="53512439" type="0" content_hash_code="7268418" os_list="linux,windows" file_path="content/browser/renderer_host/pepper/pepper_socket_utils.cc"/> <item id="pepper_udp_socket" added_in_milestone="70" hash_code="53512439" type="0" content_hash_code="7268418" os_list="linux,windows" file_path="content/browser/renderer_host/pepper/pepper_socket_utils.cc"/>
<item id="per_user_topic_registration_request" added_in_milestone="68" hash_code="10498172" type="0" content_hash_code="57098847" os_list="linux,windows" file_path="components/invalidation/impl/per_user_topic_subscription_request.cc"/> <item id="per_user_topic_registration_request" added_in_milestone="68" hash_code="10498172" type="0" content_hash_code="57098847" os_list="linux,windows" file_path="components/invalidation/impl/per_user_topic_subscription_request.cc"/>
......
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