summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-16 03:08:11 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-16 03:08:11 +0000
commit7b6eba8c18b0046b959cadc06876f61aa6bdf534 (patch)
treee4ca83de6ab7364c01e6fc97d9d371e0dc6c87fe /chrome/renderer
parent0bfcf0a486616cb0c675d8a0052b5d7b467fe84b (diff)
downloadchromium_src-7b6eba8c18b0046b959cadc06876f61aa6bdf534.zip
chromium_src-7b6eba8c18b0046b959cadc06876f61aa6bdf534.tar.gz
chromium_src-7b6eba8c18b0046b959cadc06876f61aa6bdf534.tar.bz2
Collect histograms for page load time when adblock extensions are installed.
BUG=100411 TEST=no Review URL: http://codereview.chromium.org/8305016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105712 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc34
-rw-r--r--chrome/renderer/chrome_content_renderer_client.h7
-rw-r--r--chrome/renderer/page_load_histograms.cc133
3 files changed, 174 insertions, 0 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 9e17089..e430e7c 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -785,4 +785,38 @@ void ChromeContentRendererClient::OnPurgeMemory() {
thread->AddObserver(new_spellcheck);
}
+bool ChromeContentRendererClient::IsAdblockInstalled() {
+ return extension_dispatcher_->extensions()->Contains(
+ "gighmmpiobklfepjocnamgkkbiglidom");
+}
+
+bool ChromeContentRendererClient::IsAdblockPlusInstalled() {
+ return extension_dispatcher_->extensions()->Contains(
+ "cfhdojbkjhnklbpkdaibdccddilifddb");
+}
+
+bool ChromeContentRendererClient::IsAdblockWithWebRequestInstalled() {
+ const ExtensionSet& extensions = *extension_dispatcher_->extensions();
+ for (ExtensionSet::const_iterator it = extensions.begin();
+ it != extensions.end(); ++it) {
+ if (it->second->HasAPIPermission(ExtensionAPIPermission::kExperimental) &&
+ it->second->name().find("Adblock") != std::string::npos &&
+ it->second->name().find("Plus") == std::string::npos)
+ return true;
+ }
+ return false;
+}
+
+bool ChromeContentRendererClient::IsAdblockPlusWithWebRequestInstalled() {
+ const ExtensionSet& extensions = *extension_dispatcher_->extensions();
+ for (ExtensionSet::const_iterator it = extensions.begin();
+ it != extensions.end(); ++it) {
+ if (it->second->HasAPIPermission(ExtensionAPIPermission::kExperimental) &&
+ it->second->name().find("Adblock") != std::string::npos &&
+ it->second->name().find("Plus") != std::string::npos)
+ return true;
+ }
+ return false;
+}
+
} // namespace chrome
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index a5b4d29..dfa88d0 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -90,6 +90,13 @@ class ChromeContentRendererClient : public content::ContentRendererClient {
const std::string& value) OVERRIDE;
virtual bool IsProtocolSupportedForMedia(const GURL& url) OVERRIDE;
+ // TODO(mpcomplete): remove after we collect histogram data.
+ // http://crbug.com/100411
+ bool IsAdblockInstalled();
+ bool IsAdblockPlusInstalled();
+ bool IsAdblockWithWebRequestInstalled();
+ bool IsAdblockPlusWithWebRequestInstalled();
+
// For testing.
void SetExtensionDispatcher(ExtensionDispatcher* extension_dispatcher);
diff --git a/chrome/renderer/page_load_histograms.cc b/chrome/renderer/page_load_histograms.cc
index 13d442e..be99f00 100644
--- a/chrome/renderer/page_load_histograms.cc
+++ b/chrome/renderer/page_load_histograms.cc
@@ -10,6 +10,7 @@
#include "base/time.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/extensions/url_pattern.h"
+#include "chrome/renderer/chrome_content_renderer_client.h"
#include "chrome/renderer/prerender/prerender_helper.h"
#include "chrome/renderer/renderer_histogram_snapshots.h"
#include "content/public/renderer/navigation_state.h"
@@ -577,6 +578,138 @@ void PageLoadHistograms::Dump(WebFrame* frame) {
}
}
+ // TODO(mpcomplete): remove the extension-related histograms after we collect
+ // enough data. http://crbug.com/100411
+ chrome::ChromeContentRendererClient* client =
+ static_cast<chrome::ChromeContentRendererClient*>(
+ content::GetContentClient()->renderer());
+
+ const bool use_adblock_histogram = client->IsAdblockInstalled();
+ if (use_adblock_histogram) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "PLT.Abandoned_ExtensionAdblock",
+ abandoned_page ? 1 : 0, 2);
+ switch (load_type) {
+ case NavigationState::NORMAL_LOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_NormalLoad_ExtensionAdblock",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_NORMAL:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblock",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_RELOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadReload_ExtensionAdblock",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_CACHE_STALE_OK:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblock",
+ begin_to_finish_all_loads);
+ break;
+ default:
+ break;
+ }
+ }
+
+ const bool use_adblockplus_histogram = client->IsAdblockPlusInstalled();
+ if (use_adblockplus_histogram) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "PLT.Abandoned_ExtensionAdblock",
+ abandoned_page ? 1 : 0, 2);
+ switch (load_type) {
+ case NavigationState::NORMAL_LOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_NormalLoad_ExtensionAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_NORMAL:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_RELOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadReload_ExtensionAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_CACHE_STALE_OK:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ default:
+ break;
+ }
+ }
+
+ const bool use_webrequest_adblock_histogram =
+ client->IsAdblockWithWebRequestInstalled();
+ if (use_webrequest_adblock_histogram) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "PLT.Abandoned_ExtensionWebRequestAdblock",
+ abandoned_page ? 1 : 0, 2);
+ switch (load_type) {
+ case NavigationState::NORMAL_LOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblock",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_NORMAL:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblock",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_RELOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblock",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_CACHE_STALE_OK:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblock",
+ begin_to_finish_all_loads);
+ break;
+ default:
+ break;
+ }
+ }
+
+ const bool use_webrequest_adblockplus_histogram =
+ client->IsAdblockPlusWithWebRequestInstalled();
+ if (use_webrequest_adblockplus_histogram) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "PLT.Abandoned_ExtensionWebRequestAdblockPlus",
+ abandoned_page ? 1 : 0, 2);
+ switch (load_type) {
+ case NavigationState::NORMAL_LOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_NORMAL:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_RELOAD:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ case NavigationState::LINK_LOAD_CACHE_STALE_OK:
+ PLT_HISTOGRAM(
+ "PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblockPlus",
+ begin_to_finish_all_loads);
+ break;
+ default:
+ break;
+ }
+ }
+
// For the SPDY field trials, we need to verify that the page loaded was
// the type we requested:
// if we asked for a SPDY request, we got a SPDY request