diff options
Diffstat (limited to 'chromium/components/prerender/common')
10 files changed, 371 insertions, 0 deletions
diff --git a/chromium/components/prerender/common/BUILD.gn b/chromium/components/prerender/common/BUILD.gn new file mode 100644 index 00000000000..85f2acc52b3 --- /dev/null +++ b/chromium/components/prerender/common/BUILD.gn @@ -0,0 +1,29 @@ +# Copyright 2020 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. + +import("//mojo/public/tools/bindings/mojom.gni") + +static_library("common") { + sources = [ + "prerender_final_status.cc", + "prerender_final_status.h", + "prerender_messages.h", + "prerender_origin.cc", + "prerender_origin.h", + ] + deps = [ + ":mojo_bindings", + "//ipc", + "//ipc:message_support", + "//ipc:param_traits", + ] +} + +mojom("mojo_bindings") { + sources = [ + "prerender_canceler.mojom", + "prerender_types.mojom", + ] + deps = [ "//url/mojom:url_mojom_gurl" ] +} diff --git a/chromium/components/prerender/common/DEPS b/chromium/components/prerender/common/DEPS new file mode 100644 index 00000000000..1c40d981eb6 --- /dev/null +++ b/chromium/components/prerender/common/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+ipc", +] diff --git a/chromium/components/prerender/common/OWNERS b/chromium/components/prerender/common/OWNERS new file mode 100644 index 00000000000..d8469177c4e --- /dev/null +++ b/chromium/components/prerender/common/OWNERS @@ -0,0 +1,5 @@ +per-file *_messages*.h=set noparent +per-file *_messages*.h=file://ipc/SECURITY_OWNERS + +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS diff --git a/chromium/components/prerender/common/prerender_canceler.mojom b/chromium/components/prerender/common/prerender_canceler.mojom new file mode 100644 index 00000000000..5f2863a975e --- /dev/null +++ b/chromium/components/prerender/common/prerender_canceler.mojom @@ -0,0 +1,15 @@ +// 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. + +module prerender.mojom; + +import "url/mojom/url.mojom"; + +// This interface is provided to a renderer that is used for prerendering. It +// enables the renderer to detect and respond to cases that should cause the +// prerendering to be cancelled. +interface PrerenderCanceler { + // Cancels prerendering because of an unsupported scheme. + CancelPrerenderForUnsupportedScheme(url.mojom.Url url); +}; diff --git a/chromium/components/prerender/common/prerender_final_status.cc b/chromium/components/prerender/common/prerender_final_status.cc new file mode 100644 index 00000000000..51f7c29fc0b --- /dev/null +++ b/chromium/components/prerender/common/prerender_final_status.cc @@ -0,0 +1,90 @@ +// Copyright (c) 2012 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/prerender/common/prerender_final_status.h" + +#include "base/check_op.h" +#include "base/stl_util.h" + +namespace prerender { + +namespace { + +const char* kFinalStatusNames[] = { + "Used", + "Timed Out", + "Evicted", + "Manager Shutdown", + "Closed", + "Create New Window", + "Profile Destroyed", + "App Terminating", + "Javascript Alert", + "Auth Needed", + "HTTPS", + "Download", + "Memory Limit Exceeded", + "JS Out Of Memory", + "Renderer Unresponsive", + "Too many processes", + "Rate Limit Exceeded", + "Pending Skipped", + "Control Group", + "HTML5 Media", + "Source Render View Closed", + "Renderer Crashed", + "Unsupported Scheme", + "Invalid HTTP Method", + "window.print", + "Recently Visited", + "window.opener", + "Page ID Conflict", + "Safe Browsing", + "Fragment Mismatch", + "SSL Client Certificate Requested", + "Cache or History Cleared", + "Cancelled", + "SSL Error", + "Cross-Site Navigation Pending", + "DevTools Attached To The Tab", + "Session Storage Namespace Mismatch", + "No Use Group", + "Match Complete Dummy", + "Duplicate", + "OpenURL", + "WouldHaveBeenUsed", + "Register Protocol Handler", + "Creating Audio Stream", + "Page Being Captured", + "Bad Deferred Redirect", + "Navigation Uncommitted", + "New Navigation Entry", + "Cookie Store Not Loaded", + "Cookie Conflict", + "Non-Empty Browsing Instance", + "Navigation Intercepted", + "Prerendering Disabled", + "Cellular Network", + "Block Third Party Cookies", + "Credential Manager API", + "NoStatePrefetch Finished", + "Low-End Device", + "BrowserSwitcher Switch", + "GWS Holdback", + "Unknown", + "Navigation Predictor Holdback", + "Max", +}; +static_assert(base::size(kFinalStatusNames) == FINAL_STATUS_MAX + 1, + "status name count mismatch"); + +} // namespace + +const char* NameFromFinalStatus(FinalStatus final_status) { + DCHECK_LT(static_cast<unsigned int>(final_status), + base::size(kFinalStatusNames)); + return kFinalStatusNames[final_status]; +} + +} // namespace prerender diff --git a/chromium/components/prerender/common/prerender_final_status.h b/chromium/components/prerender/common/prerender_final_status.h new file mode 100644 index 00000000000..ffcddd3edbe --- /dev/null +++ b/chromium/components/prerender/common/prerender_final_status.h @@ -0,0 +1,91 @@ +// Copyright (c) 2012 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 COMPONENTS_PRERENDER_COMMON_PRERENDER_FINAL_STATUS_H_ +#define COMPONENTS_PRERENDER_COMMON_PRERENDER_FINAL_STATUS_H_ + +#include "components/prerender/common/prerender_origin.h" + +namespace prerender { + +// FinalStatus indicates whether |this| was used, or why it was cancelled. +// NOTE: New values need to be appended, since they are used in histograms. + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. The values should remain +// synchronized with the enum PrerenderFinalStatus in +// //tools/metrics/histograms/enums.xml. +enum FinalStatus { + FINAL_STATUS_USED = 0, + FINAL_STATUS_TIMED_OUT = 1, + // Obsolete: FINAL_STATUS_EVICTED = 2, + // Obsolete: FINAL_STATUS_MANAGER_SHUTDOWN = 3, + // Obsolete: FINAL_STATUS_CLOSED = 4, + // Obsolete: FINAL_STATUS_CREATE_NEW_WINDOW = 5, + FINAL_STATUS_PROFILE_DESTROYED = 6, + FINAL_STATUS_APP_TERMINATING = 7, + // Obsolete: FINAL_STATUS_JAVASCRIPT_ALERT = 8, + FINAL_STATUS_AUTH_NEEDED = 9, + // Obsolete: FINAL_STATUS_HTTPS = 10, + FINAL_STATUS_DOWNLOAD = 11, + FINAL_STATUS_MEMORY_LIMIT_EXCEEDED = 12, + // Obsolete: FINAL_STATUS_JS_OUT_OF_MEMORY = 13, + // Obsolete: FINAL_STATUS_RENDERER_UNRESPONSIVE = 14, + FINAL_STATUS_TOO_MANY_PROCESSES = 15, + FINAL_STATUS_RATE_LIMIT_EXCEEDED = 16, + // Obsolete: FINAL_STATUS_PENDING_SKIPPED = 17, + // Obsolete: FINAL_STATUS_CONTROL_GROUP = 18, + // Obsolete: FINAL_STATUS_HTML5_MEDIA = 19, + // Obsolete: FINAL_STATUS_SOURCE_RENDER_VIEW_CLOSED = 20, + FINAL_STATUS_RENDERER_CRASHED = 21, + FINAL_STATUS_UNSUPPORTED_SCHEME = 22, + // Obsolete: FINAL_STATUS_INVALID_HTTP_METHOD = 23, + // Obsolete: FINAL_STATUS_WINDOW_PRINT = 24, + FINAL_STATUS_RECENTLY_VISITED = 25, + // Obsolete: FINAL_STATUS_WINDOW_OPENER = 26, + // Obsolete: FINAL_STATUS_PAGE_ID_CONFLICT = 27, + FINAL_STATUS_SAFE_BROWSING = 28, + // Obsolete: FINAL_STATUS_FRAGMENT_MISMATCH = 29, + FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED = 30, + FINAL_STATUS_CACHE_OR_HISTORY_CLEARED = 31, + FINAL_STATUS_CANCELLED = 32, + FINAL_STATUS_SSL_ERROR = 33, + // Obsolete: FINAL_STATUS_CROSS_SITE_NAVIGATION_PENDING = 34, + // Obsolete: FINAL_STATUS_DEVTOOLS_ATTACHED = 35, + // Obsolete: FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH = 36, + // Obsolete: FINAL_STATUS_NO_USE_GROUP = 37, + // Obsolete: FINAL_STATUS_MATCH_COMPLETE_DUMMY = 38, + FINAL_STATUS_DUPLICATE = 39, + FINAL_STATUS_OPEN_URL = 40, + // Obsolete: FINAL_STATUS_WOULD_HAVE_BEEN_USED = 41, + // Obsolete: FINAL_STATUS_REGISTER_PROTOCOL_HANDLER = 42, + // Obsolete: FINAL_STATUS_CREATING_AUDIO_STREAM = 43, + // Obsolete: FINAL_STATUS_PAGE_BEING_CAPTURED = 44, + // Obsolete: FINAL_STATUS_BAD_DEFERRED_REDIRECT = 45, + // Obsolete: FINAL_STATUS_NAVIGATION_UNCOMMITTED = 46, + // Obsolete: FINAL_STATUS_NEW_NAVIGATION_ENTRY = 47, + // Obsolete: FINAL_STATUS_COOKIE_STORE_NOT_LOADED = 48, + // Obsolete: FINAL_STATUS_COOKIE_CONFLICT = 49, + // Obsolete: FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE = 50, + FINAL_STATUS_NAVIGATION_INTERCEPTED = 51, + FINAL_STATUS_PRERENDERING_DISABLED = 52, + FINAL_STATUS_CELLULAR_NETWORK = 53, + FINAL_STATUS_BLOCK_THIRD_PARTY_COOKIES = 54, + // Obsolete: FINAL_STATUS_CREDENTIAL_MANAGER_API = 55, + FINAL_STATUS_NOSTATE_PREFETCH_FINISHED = 56, + FINAL_STATUS_LOW_END_DEVICE = 57, + FINAL_STATUS_BROWSER_SWITCH = 58, + FINAL_STATUS_GWS_HOLDBACK = 59, + FINAL_STATUS_UNKNOWN = 60, + FINAL_STATUS_NAVIGATION_PREDICTOR_HOLDBACK = 61, + FINAL_STATUS_MAX, +}; + +// Return a human-readable name for |final_status|. |final_status| +// is expected to be a valid value. +const char* NameFromFinalStatus(FinalStatus final_status); + +} // namespace prerender + +#endif // COMPONENTS_PRERENDER_COMMON_PRERENDER_FINAL_STATUS_H_
\ No newline at end of file diff --git a/chromium/components/prerender/common/prerender_messages.h b/chromium/components/prerender/common/prerender_messages.h new file mode 100644 index 00000000000..e6915527834 --- /dev/null +++ b/chromium/components/prerender/common/prerender_messages.h @@ -0,0 +1,35 @@ +// Copyright (c) 2012 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 COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_ +#define COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_ + +#include "components/prerender/common/prerender_types.mojom.h" +#include "ipc/ipc_message.h" +#include "ipc/ipc_message_macros.h" +#include "ipc/ipc_param_traits.h" + +#define IPC_MESSAGE_START PrerenderMsgStart + +IPC_ENUM_TRAITS_MAX_VALUE(prerender::mojom::PrerenderMode, + prerender::mojom::PrerenderMode::kMaxValue) + +// PrerenderLinkManager Messages + +// Sent by the renderer process to notify that the resource prefetcher has +// discovered all possible subresources and issued requests for them. +IPC_MESSAGE_CONTROL0(PrerenderHostMsg_PrefetchFinished) + +// PrerenderDispatcher Messages +// These are messages sent from the browser to the renderer in relation to +// running prerenders. + +// Tells a renderer if it's currently being prerendered. Must only be set +// before any navigation occurs, and only set to NO_PRERENDER at most once after +// that. +IPC_MESSAGE_ROUTED2(PrerenderMsg_SetIsPrerendering, + prerender::mojom::PrerenderMode, + std::string /* histogram_prefix */) + +#endif // COMPONENTS_PRERENDER_COMMON_PRERENDER_MESSAGES_H_ diff --git a/chromium/components/prerender/common/prerender_origin.cc b/chromium/components/prerender/common/prerender_origin.cc new file mode 100644 index 00000000000..ccb6d437a84 --- /dev/null +++ b/chromium/components/prerender/common/prerender_origin.cc @@ -0,0 +1,44 @@ +// Copyright (c) 2012 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/prerender/common/prerender_origin.h" + +#include "base/metrics/histogram_macros.h" +#include "base/stl_util.h" + +namespace prerender { + +namespace { + +const char* kOriginNames[] = { + "[Deprecated] Link Rel Prerender (original)", + "[Deprecated] Omnibox (original)", + "GWS Prerender", + "[Deprecated] Omnibox (conservative)", + "[Deprecated] Omnibox (exact)", + "Omnibox", + "None", + "Link Rel Prerender (same domain)", + "Link Rel Prerender (cross domain)", + "[Deprecated] Local Predictor", + "External Request", + "[Deprecated] Instant", + "[Deprecated] Link Rel Next", + "External Request Forced Cellular", + "[Deprecated] Offline", + "Navigation Predictor", + "Isolated Prerender", + "Max", +}; +static_assert(base::size(kOriginNames) == ORIGIN_MAX + 1, + "prerender origin name count mismatch"); + +} // namespace + +const char* NameFromOrigin(Origin origin) { + DCHECK(static_cast<int>(origin) >= 0 && origin <= ORIGIN_MAX); + return kOriginNames[origin]; +} + +} // namespace prerender diff --git a/chromium/components/prerender/common/prerender_origin.h b/chromium/components/prerender/common/prerender_origin.h new file mode 100644 index 00000000000..861d7bb1ede --- /dev/null +++ b/chromium/components/prerender/common/prerender_origin.h @@ -0,0 +1,43 @@ +// Copyright (c) 2012 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 COMPONENTS_PRERENDER_COMMON_PRERENDER_ORIGIN_H_ +#define COMPONENTS_PRERENDER_COMMON_PRERENDER_ORIGIN_H_ + +namespace prerender { + +// Origin indicates what caused the prerender. +// NOTE: New values need to be appended, since they are used in histograms. + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. The values should remain +// synchronized with the enum PrerenderOrigin in +// //tools/metrics/histograms/enums.xml. +enum Origin { + // Obsolete: ORIGIN_LINK_REL_PRERENDER = 0, + // Obsolete: ORIGIN_OMNIBOX_ORIGINAL = 1, + ORIGIN_GWS_PRERENDER = 2, + // Obsolete: ORIGIN_OMNIBOX_CONSERVATIVE = 3, + // Obsolete: ORIGIN_OMNIBOX_EXACT = 4, + ORIGIN_OMNIBOX = 5, + ORIGIN_NONE = 6, + ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN = 7, + ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN = 8, + // Obsolete: ORIGIN_LOCAL_PREDICTOR = 9, + ORIGIN_EXTERNAL_REQUEST = 10, + // Obsolete: ORIGIN_INSTANT = 11, + ORIGIN_LINK_REL_NEXT = 12, + ORIGIN_EXTERNAL_REQUEST_FORCED_PRERENDER = 13, + // Obsolete: ORIGIN_OFFLINE = 14, + ORIGIN_NAVIGATION_PREDICTOR = 15, + ORIGIN_ISOLATED_PRERENDER = 16, + ORIGIN_MAX = 17, +}; + +// Return a human-readable name for |origin|. +const char* NameFromOrigin(Origin origin); + +} // namespace prerender + +#endif // COMPONENTS_PRERENDER_COMMON_PRERENDER_ORIGIN_H_ diff --git a/chromium/components/prerender/common/prerender_types.mojom b/chromium/components/prerender/common/prerender_types.mojom new file mode 100644 index 00000000000..286aff0fd66 --- /dev/null +++ b/chromium/components/prerender/common/prerender_types.mojom @@ -0,0 +1,16 @@ +// Copyright 2020 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. + +module prerender.mojom; + +enum PrerenderMode { + // Neither prefetch nor prerender. + kNoPrerender = 0, + + // Only used in tests. Can be removed after http://crbug.com/898955 is fixed. + kDeprecatedFullPrerender = 1, + + // Prefetch some network resources to warm up the cache. + kPrefetchOnly = 2, +}; |