168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/metrics/histogram.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/strings/stringprintf.h"
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/activity_log/uma_policy.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_dir.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "extensions/common/manifest_constants.h"
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "net/dns/mock_host_resolver.h"
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)using extensions::UmaPolicy;
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char* kGooglePrefix = "ExtensionActivity.Google";
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char* kNonGooglePrefix = "ExtensionActivity";
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// These tests need to ensure that all of the extension JavaScript completes
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// before the histograms are checked. To accomplish this, the test relies on
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// some JavaScript in chrome/test/data/extensions/api_test/uma_policy/:
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// * When the test navigates to opener.com, opener.js will use window.open() to
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//   pop open a new window with the appropriate URL for the test case. This
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//   ensures that the testing framework never reuses a window that's still
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//   running a previous test case.
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// * The test extension code in content_script.js tells background.js when it's
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//   done. When it's finished, background.js closes the blocker.com window. So
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//   blocker.com will remain open (and block) until the tests complete.
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ActivityLogUmaPolicyTest : public ExtensionApiTest {
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string ConcatNames(const char* prefix, int status_num) {
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return base::StringPrintf(
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "%s.%s",
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      prefix,
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      extensions::UmaPolicy::GetHistogramName(
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          static_cast<extensions::UmaPolicy::PageStatus>(status_num)));
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// TODO(felt): These are disabled due to crbug.com/294500, since they fail
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// due to a blink bug. The fix went in to Blink on Thursday and should roll
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// on Monday 9/23.
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// These are all sequential navigations, so they should each be logged
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// independently.
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ActivityLogUmaPolicyTest, DISABLED_SequentialNavs) {
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  host_resolver()->AddRule("*", "127.0.0.1");
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  StartEmbeddedTestServer();
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const extensions::Extension* ext =
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      LoadExtension(test_data_dir_.AppendASCII("uma_policy"));
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(ext);
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#google"), NEW_WINDOW,
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#google?q=a"), NEW_WINDOW,
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#google?q=b"), NEW_WINDOW,
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#cnn?q=a"), NEW_WINDOW,
7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#cnn?q=b"), NEW_WINDOW,
7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = UmaPolicy::NONE + 1; i < UmaPolicy::MAX_STATUS - 2; ++i) {
8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* google_histogram = base::Histogram::FactoryGet(
8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kGooglePrefix, i),
8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> google_samples =
8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        google_histogram->SnapshotSamples();
8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(3, google_samples->TotalCount());
8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(3, google_samples->GetCount(1));
9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* cnn_histogram = base::Histogram::FactoryGet(
9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kNonGooglePrefix, i),
9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> cnn_samples =
9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        cnn_histogram->SnapshotSamples();
9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    if (ConcatNames(kNonGooglePrefix, i) != "ExtensionActivity.ContentScript" &&
9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kNonGooglePrefix, i) != "ExtensionActivity.ReadDom") {
9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // There's a content script on opener.com that checks the location.
9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // The test is not set up to accurately record opener.com histograms due
10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // to the possibility of race conditions in the testing framework, so we
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // can't check those values.
10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      EXPECT_EQ(2, cnn_samples->GetCount(1));
10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    }
10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Two windows are open at once with the same google.com TLD.
10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// However, they should be treated separately because they have different URLs.
10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(
11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ActivityLogUmaPolicyTest, DISABLED_ParallelDistinctNavs) {
11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  host_resolver()->AddRule("*", "127.0.0.1");
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  StartEmbeddedTestServer();
11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const extensions::Extension* ext =
11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      LoadExtension(test_data_dir_.AppendASCII("uma_policy"));
11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(ext);
11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#google?p=a"), NEW_WINDOW,
12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#google?p=b"), NEW_WINDOW,
12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = UmaPolicy::NONE + 1; i < UmaPolicy::MAX_STATUS - 2; ++i) {
12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* google_histogram = base::Histogram::FactoryGet(
12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kGooglePrefix, i),
13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> google_samples =
13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        google_histogram->SnapshotSamples();
13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(2, google_samples->GetCount(1));
13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Two windows are open at once with the same Google URLs.
13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// They should be treated the same.
13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ActivityLogUmaPolicyTest, DISABLED_Google_ParallelSame) {
14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  host_resolver()->AddRule("*", "127.0.0.1");
14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  StartEmbeddedTestServer();
14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const extensions::Extension* ext =
14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      LoadExtension(test_data_dir_.AppendASCII("uma_policy"));
14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(ext);
14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
14868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#googlea"), NEW_WINDOW,
14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
15168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#googleb"), NEW_WINDOW,
15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = UmaPolicy::NONE + 1; i < UmaPolicy::MAX_STATUS - 2; ++i) {
15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* google_histogram = base::Histogram::FactoryGet(
15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kGooglePrefix, i),
15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> google_samples =
16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        google_histogram->SnapshotSamples();
16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(1, google_samples->GetCount(1));
16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
16668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Two windows are open at once with the same non-Google URLs.
16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// They should be treated the same.
16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ActivityLogUmaPolicyTest,
16968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    DISABLED_NonGoogle_ParallelSame) {
17068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  host_resolver()->AddRule("*", "127.0.0.1");
17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  StartEmbeddedTestServer();
17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const extensions::Extension* ext =
17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      LoadExtension(test_data_dir_.AppendASCII("uma_policy"));
17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(ext);
17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#cnna"), NEW_WINDOW,
17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#cnnb"), NEW_WINDOW,
18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = UmaPolicy::NONE + 1; i < UmaPolicy::MAX_STATUS - 2; ++i) {
18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* cnn_histogram = base::Histogram::FactoryGet(
18868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kNonGooglePrefix, i),
18968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
19068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> cnn_samples =
19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        cnn_histogram->SnapshotSamples();
19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    if (ConcatNames(kNonGooglePrefix, i) != "ExtensionActivity.ContentScript" &&
19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ConcatNames(kNonGooglePrefix, i) != "ExtensionActivity.ReadDom") {
19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // There's a content script on opener.com that checks the location.
19568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // The test is not set up to accurately record opener.com histograms due
19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // to the possibility of race conditions in the testing framework, so we
19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      // can't check those values.
19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      EXPECT_EQ(1, cnn_samples->GetCount(1));
19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    }
20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
20368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This runs with multiple extensions installed.
20468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ActivityLogUmaPolicyTest, DISABLED_MultipleExtensions) {
20568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  host_resolver()->AddRule("*", "127.0.0.1");
20668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  StartEmbeddedTestServer();
20768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const extensions::Extension* ext =
20968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      LoadExtension(test_data_dir_.AppendASCII("uma_policy"));
21068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(ext);
21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
21268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const char* script2 =
21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "document.createElement('script');"
21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "document.createElement('iframe');"
21568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "document.createElement('div');"
21668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "document.createElement('embed');"
21768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "document.createElement('object');";
21868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
21968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const char* manifest =
22068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "{"
22168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "  \"name\": \"Activity Log UMA Policy Test Extension\","
22268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "  \"version\": \"0.%s\","
22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "  \"description\": \"Testing the histogramming\","
22468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "  \"content_scripts\": ["
22568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "      {"
22668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "        \"matches\": "
22768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "            [\"http://www.google.com/*\","
22868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "             \"http://www.cnn.com/*\"],"
22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "        \"js\": [\"content_script.js\"]"
23068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "      }"
23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "    ],"
23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "  \"manifest_version\": 2"
23368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "}";
23468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
23568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  extensions::TestExtensionDir dir2;
23668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  dir2.WriteManifest(base::StringPrintf(manifest, "2"));
23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  dir2.WriteFile(FILE_PATH_LITERAL("content_script.js"), script2);
23868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  LoadExtension(dir2.unpacked_path());
23968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
24068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
24168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#google"), NEW_WINDOW,
24268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
24368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
24468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
24568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
24668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        browser(), GURL("http://www.opener.com/#cnn?q=b"), NEW_WINDOW,
24768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui_test_utils::BROWSER_TEST_NONE);
24868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
24968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser(), GURL("http://www.blocker.com"), 2);
25068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
25168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const char* subset_one[] = {
25268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "CreatedLink",
25368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "InnerHtml",
25468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "DocumentWrite"
25568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  };
25668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
25768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const char* subset_two[] = {
25868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "ContentScript",
25968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "CreatedScript",
26068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "CreatedIframe",
26168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "CreatedDiv",
26268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "CreatedEmbed",
26368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "CreatedObject",
26468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "InvokedDomMethod"
26568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  };
26668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
26768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // These were only touched by one of the scripts.
26868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (size_t i = 0; i < arraysize(subset_one); ++i) {
26968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* google_histogram = base::Histogram::FactoryGet(
27068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        std::string(kGooglePrefix) + "." + std::string(subset_one[i]),
27168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
27268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> google_samples =
27368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        google_histogram->SnapshotSamples();
27468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(1, google_samples->GetCount(1));
27568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
27668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* cnn_histogram = base::Histogram::FactoryGet(
27768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        std::string(kNonGooglePrefix) + "." + std::string(subset_one[i]),
27868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
27968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> cnn_samples =
28068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        cnn_histogram->SnapshotSamples();
28168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(1, cnn_samples->GetCount(1));
28268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
28368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
28468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // These were touched by both scripts.
28568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (size_t i = 0; i < arraysize(subset_two); ++i) {
28668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* google_histogram = base::Histogram::FactoryGet(
28768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        std::string(kGooglePrefix) + "." + std::string(subset_two[i]),
28868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
28968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> google_samples =
29068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        google_histogram->SnapshotSamples();
29168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(1, google_samples->GetCount(2));
29268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
29368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    base::HistogramBase* cnn_histogram = base::Histogram::FactoryGet(
29468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        std::string(kNonGooglePrefix) + "." + std::string(subset_two[i]),
29568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        1, 100, 50, base::HistogramBase::kNoFlags);
29668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<base::HistogramSamples> cnn_samples =
29768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        cnn_histogram->SnapshotSamples();
29868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(1, cnn_samples->GetCount(2));
29968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
30068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
30168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
302