summaryrefslogtreecommitdiff
path: root/chromium/components/prerender/common
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/prerender/common')
-rw-r--r--chromium/components/prerender/common/BUILD.gn29
-rw-r--r--chromium/components/prerender/common/DEPS3
-rw-r--r--chromium/components/prerender/common/OWNERS5
-rw-r--r--chromium/components/prerender/common/prerender_canceler.mojom15
-rw-r--r--chromium/components/prerender/common/prerender_final_status.cc90
-rw-r--r--chromium/components/prerender/common/prerender_final_status.h91
-rw-r--r--chromium/components/prerender/common/prerender_messages.h35
-rw-r--r--chromium/components/prerender/common/prerender_origin.cc44
-rw-r--r--chromium/components/prerender/common/prerender_origin.h43
-rw-r--r--chromium/components/prerender/common/prerender_types.mojom16
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,
+};