Chromium Code Reviews| Index: chrome/browser/tab_contents/navigation_metrics_recorder.cc |
| diff --git a/chrome/browser/tab_contents/navigation_metrics_recorder.cc b/chrome/browser/tab_contents/navigation_metrics_recorder.cc |
| index a6c13eb342d26a077178479871344c76f3f0f1a2..5706e1c1e4e6b81f6d8610f8dbb8fcb6a8712a67 100644 |
| --- a/chrome/browser/tab_contents/navigation_metrics_recorder.cc |
| +++ b/chrome/browser/tab_contents/navigation_metrics_recorder.cc |
| @@ -20,6 +20,7 @@ |
| #include "content/public/browser/render_widget_host.h" |
| #include "content/public/browser/render_widget_host_view.h" |
| #include "content/public/common/frame_navigate_params.h" |
| +#include "net/base/data_url.h" |
| #include "url/gurl.h" |
| #include "url/origin.h" |
| @@ -27,6 +28,34 @@ |
| #include "base/win/windows_version.h" |
| #endif |
| +namespace { |
| + |
| +// List of mime types that can run JavaScript. |
| +static const struct MimeTypePair { |
| + const char* const mime_type; |
| + NavigationMetricsRecorder::MimeType histogram_value; |
| +} kScriptingMimeTypes[] = { |
| + {"text/html", NavigationMetricsRecorder::MIME_TYPE_HTML}, |
| + {"application/xhtml+xml", NavigationMetricsRecorder::MIME_TYPE_XHTML}, |
| + {"application/pdf", NavigationMetricsRecorder::MIME_TYPE_PDF}, |
| + {"image/svg+xml", NavigationMetricsRecorder::MIME_TYPE_SVG}}; |
| + |
| +void RecordDataURLMimeType(const std::string& mime_type) { |
| + NavigationMetricsRecorder::MimeType value = |
| + NavigationMetricsRecorder::MIME_TYPE_OTHER; |
| + for (const MimeTypePair& pair : kScriptingMimeTypes) { |
| + if (mime_type == pair.mime_type) { |
| + value = pair.histogram_value; |
| + break; |
| + } |
| + } |
| + LOG(ERROR) << ">> MIME TYPE: " << mime_type; |
|
Avi (use Gerrit)
2017/01/13 16:52:52
You need to remove logging lines before committing
meacer
2017/01/13 18:37:12
Done.
|
| + UMA_HISTOGRAM_ENUMERATION("Navigation.MainFrameScheme.DataUrl.MimeType", |
| + value, NavigationMetricsRecorder::MIME_TYPE_MAX); |
| +} |
| + |
| +} // namespace |
| + |
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(NavigationMetricsRecorder); |
| NavigationMetricsRecorder::NavigationMetricsRecorder( |
| @@ -61,9 +90,18 @@ void NavigationMetricsRecorder::DidNavigateMainFrame( |
| // a |data:| URL, either by redirects or user clicking a link. |
| if (details.entry->GetVirtualURL().SchemeIs(url::kDataScheme) && |
| !ui::PageTransitionCoreTypeIs(params.transition, |
| - ui::PAGE_TRANSITION_TYPED) && |
| - !details.previous_url.is_empty()) { |
| - rappor::SampleDomainAndRegistryFromGURL( |
| - rappor_service_, "Navigation.Scheme.Data", details.previous_url); |
| + ui::PAGE_TRANSITION_TYPED)) { |
| + if (!details.previous_url.is_empty()) { |
| + rappor::SampleDomainAndRegistryFromGURL( |
| + rappor_service_, "Navigation.Scheme.Data", details.previous_url); |
| + } |
| + |
| + // Also record the mime type of the data: URL. |
| + std::string mime_type; |
| + std::string charset; |
| + if (net::DataURL::Parse(details.entry->GetVirtualURL(), &mime_type, |
| + &charset, nullptr)) { |
| + RecordDataURLMimeType(mime_type); |
| + } |
| } |
| } |