| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/service_worker/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <tuple> | 8 #include <tuple> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 1682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1693 | 1693 |
| 1694 // Should not have timed out, so error callback should not have been | 1694 // Should not have timed out, so error callback should not have been |
| 1695 // called and FinishRequest should return true. | 1695 // called and FinishRequest should return true. |
| 1696 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1696 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1697 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, | 1697 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, |
| 1698 base::Time::Now())); | 1698 base::Time::Now())); |
| 1699 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, | 1699 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, |
| 1700 base::Time::Now())); | 1700 base::Time::Now())); |
| 1701 } | 1701 } |
| 1702 | 1702 |
| 1703 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTest { | |
| 1704 protected: | |
| 1705 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTest() {} | |
| 1706 | |
| 1707 void StartWorker(ServiceWorkerMetrics::EventType purpose) { | |
| 1708 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1709 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status)); | |
| 1710 base::RunLoop().RunUntilIdle(); | |
| 1711 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1712 } | |
| 1713 | |
| 1714 void StopWorker() { | |
| 1715 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1716 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | |
| 1717 base::RunLoop().RunUntilIdle(); | |
| 1718 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1719 } | |
| 1720 | |
| 1721 void SimpleNavigationHintTest( | |
| 1722 ServiceWorkerMetrics::EventType purpose, | |
| 1723 const char* changed_historam_name, | |
| 1724 const std::vector<const char*>& unchanged_historam_names) { | |
| 1725 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1726 StartWorker(purpose); | |
| 1727 StopWorker(); | |
| 1728 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 0); | |
| 1729 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 1); | |
| 1730 histogram_tester_.ExpectBucketCount(changed_historam_name, true, 0); | |
| 1731 histogram_tester_.ExpectBucketCount(changed_historam_name, false, 1); | |
| 1732 for (const char* unchanged_historam_name : unchanged_historam_names) | |
| 1733 histogram_tester_.ExpectTotalCount(unchanged_historam_name, 0); | |
| 1734 | |
| 1735 StartWorker(purpose); | |
| 1736 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::MESSAGE); | |
| 1737 StopWorker(); | |
| 1738 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 0); | |
| 1739 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 2); | |
| 1740 histogram_tester_.ExpectBucketCount(changed_historam_name, true, 0); | |
| 1741 histogram_tester_.ExpectBucketCount(changed_historam_name, false, 2); | |
| 1742 for (const char* unchanged_historam_name : unchanged_historam_names) | |
| 1743 histogram_tester_.ExpectTotalCount(unchanged_historam_name, 0); | |
| 1744 | |
| 1745 StartWorker(purpose); | |
| 1746 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); | |
| 1747 StopWorker(); | |
| 1748 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 1); | |
| 1749 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 2); | |
| 1750 histogram_tester_.ExpectBucketCount(changed_historam_name, true, 1); | |
| 1751 histogram_tester_.ExpectBucketCount(changed_historam_name, false, 2); | |
| 1752 for (const char* unchanged_historam_name : unchanged_historam_names) | |
| 1753 histogram_tester_.ExpectTotalCount(unchanged_historam_name, 0); | |
| 1754 | |
| 1755 StartWorker(purpose); | |
| 1756 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_SUB_FRAME); | |
| 1757 StopWorker(); | |
| 1758 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 2); | |
| 1759 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 2); | |
| 1760 histogram_tester_.ExpectBucketCount(changed_historam_name, true, 2); | |
| 1761 histogram_tester_.ExpectBucketCount(changed_historam_name, false, 2); | |
| 1762 for (const char* unchanged_historam_name : unchanged_historam_names) | |
| 1763 histogram_tester_.ExpectTotalCount(unchanged_historam_name, 0); | |
| 1764 } | |
| 1765 | |
| 1766 static const char kNavigationHintPrecision[]; | |
| 1767 static const char kLinkMouseDown[]; | |
| 1768 static const char kLinkTapUnconfirmed[]; | |
| 1769 static const char kLinkTapDown[]; | |
| 1770 | |
| 1771 base::HistogramTester histogram_tester_; | |
| 1772 | |
| 1773 private: | |
| 1774 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerNavigationHintUMATest); | |
| 1775 }; | |
| 1776 | |
| 1777 const char ServiceWorkerNavigationHintUMATest::kNavigationHintPrecision[] = | |
| 1778 "ServiceWorker.NavigationHintPrecision"; | |
| 1779 const char ServiceWorkerNavigationHintUMATest::kLinkMouseDown[] = | |
| 1780 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN"; | |
| 1781 const char ServiceWorkerNavigationHintUMATest::kLinkTapUnconfirmed[] = | |
| 1782 "ServiceWorker.NavigationHintPrecision.LINK_TAP_UNCONFIRMED"; | |
| 1783 const char ServiceWorkerNavigationHintUMATest::kLinkTapDown[] = | |
| 1784 "ServiceWorker.NavigationHintPrecision.LINK_TAP_DOWN"; | |
| 1785 | |
| 1786 TEST_F(ServiceWorkerNavigationHintUMATest, LinkMouseDown) { | |
| 1787 SimpleNavigationHintTest( | |
| 1788 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, | |
| 1789 kLinkMouseDown, {kLinkTapUnconfirmed, kLinkTapDown}); | |
| 1790 } | |
| 1791 | |
| 1792 TEST_F(ServiceWorkerNavigationHintUMATest, LinkTapUnconfirmed) { | |
| 1793 SimpleNavigationHintTest( | |
| 1794 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED, | |
| 1795 kLinkTapUnconfirmed, {kLinkMouseDown, kLinkTapDown}); | |
| 1796 } | |
| 1797 | |
| 1798 TEST_F(ServiceWorkerNavigationHintUMATest, LinkTapDown) { | |
| 1799 SimpleNavigationHintTest( | |
| 1800 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN, | |
| 1801 kLinkTapDown, {kLinkMouseDown, kLinkTapUnconfirmed}); | |
| 1802 } | |
| 1803 | |
| 1804 TEST_F(ServiceWorkerNavigationHintUMATest, ConcurrentStart) { | |
| 1805 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | |
| 1806 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1807 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1808 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | |
| 1809 CreateReceiverOnCurrentThread(&status1)); | |
| 1810 version_->StartWorker( | |
| 1811 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, | |
| 1812 CreateReceiverOnCurrentThread(&status2)); | |
| 1813 base::RunLoop().RunUntilIdle(); | |
| 1814 EXPECT_EQ(SERVICE_WORKER_OK, status1); | |
| 1815 EXPECT_EQ(SERVICE_WORKER_OK, status2); | |
| 1816 StopWorker(); | |
| 1817 // The first purpose of starting worker was not a navigation hint. | |
| 1818 histogram_tester_.ExpectTotalCount(kNavigationHintPrecision, 0); | |
| 1819 | |
| 1820 status1 = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1821 status2 = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1822 version_->StartWorker( | |
| 1823 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, | |
| 1824 CreateReceiverOnCurrentThread(&status2)); | |
| 1825 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | |
| 1826 CreateReceiverOnCurrentThread(&status1)); | |
| 1827 base::RunLoop().RunUntilIdle(); | |
| 1828 EXPECT_EQ(SERVICE_WORKER_OK, status1); | |
| 1829 EXPECT_EQ(SERVICE_WORKER_OK, status2); | |
| 1830 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); | |
| 1831 StopWorker(); | |
| 1832 // The first purpose of starting worker was a navigation hint. | |
| 1833 histogram_tester_.ExpectTotalCount(kNavigationHintPrecision, 1); | |
| 1834 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 1); | |
| 1835 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 0); | |
| 1836 } | |
| 1837 | |
| 1838 TEST_F(ServiceWorkerNavigationHintUMATest, StartWhileStopping) { | |
| 1839 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN); | |
| 1840 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | |
| 1841 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | |
| 1842 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); | |
| 1843 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 0); | |
| 1844 | |
| 1845 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN); | |
| 1846 // The UMA for kLinkMouseDown must be recorded while restarting. | |
| 1847 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); | |
| 1848 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0); | |
| 1849 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 1850 StopWorker(); | |
| 1851 // The UMA for kLinkMouseDown must be recorded when the worker stopped. | |
| 1852 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); | |
| 1853 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1); | |
| 1854 } | |
| 1855 | |
| 1856 } // namespace content | 1703 } // namespace content |
| OLD | NEW |