OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <cstdio> | 5 #include <cstdio> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/memory/shared_memory.h" | 10 #include "base/memory/shared_memory.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 | 47 |
48 // Returns a test URL for index |i| | 48 // Returns a test URL for index |i| |
49 GURL TestURL(int i) { | 49 GURL TestURL(int i) { |
50 return GURL(base::StringPrintf("%s%d", g_test_prefix, i)); | 50 return GURL(base::StringPrintf("%s%d", g_test_prefix, i)); |
51 } | 51 } |
52 | 52 |
53 std::vector<VisitedLinkSlave*> g_slaves; | 53 std::vector<VisitedLinkSlave*> g_slaves; |
54 | 54 |
55 class TestVisitedLinkDelegate : public VisitedLinkDelegate { | 55 class TestVisitedLinkDelegate : public VisitedLinkDelegate { |
56 public: | 56 public: |
57 virtual void RebuildTable( | 57 void RebuildTable(const scoped_refptr<URLEnumerator>& enumerator) override; |
58 const scoped_refptr<URLEnumerator>& enumerator) override; | |
59 | 58 |
60 void AddURLForRebuild(const GURL& url); | 59 void AddURLForRebuild(const GURL& url); |
61 | 60 |
62 private: | 61 private: |
63 URLs rebuild_urls_; | 62 URLs rebuild_urls_; |
64 }; | 63 }; |
65 | 64 |
66 void TestVisitedLinkDelegate::RebuildTable( | 65 void TestVisitedLinkDelegate::RebuildTable( |
67 const scoped_refptr<URLEnumerator>& enumerator) { | 66 const scoped_refptr<URLEnumerator>& enumerator) { |
68 for (URLs::const_iterator itr = rebuild_urls_.begin(); | 67 for (URLs::const_iterator itr = rebuild_urls_.begin(); |
69 itr != rebuild_urls_.end(); | 68 itr != rebuild_urls_.end(); |
70 ++itr) | 69 ++itr) |
71 enumerator->OnURL(*itr); | 70 enumerator->OnURL(*itr); |
72 enumerator->OnComplete(true); | 71 enumerator->OnComplete(true); |
73 } | 72 } |
74 | 73 |
75 void TestVisitedLinkDelegate::AddURLForRebuild(const GURL& url) { | 74 void TestVisitedLinkDelegate::AddURLForRebuild(const GURL& url) { |
76 rebuild_urls_.push_back(url); | 75 rebuild_urls_.push_back(url); |
77 } | 76 } |
78 | 77 |
79 class TestURLIterator : public VisitedLinkMaster::URLIterator { | 78 class TestURLIterator : public VisitedLinkMaster::URLIterator { |
80 public: | 79 public: |
81 explicit TestURLIterator(const URLs& urls); | 80 explicit TestURLIterator(const URLs& urls); |
82 | 81 |
83 virtual const GURL& NextURL() override; | 82 const GURL& NextURL() override; |
84 virtual bool HasNextURL() const override; | 83 bool HasNextURL() const override; |
85 | 84 |
86 private: | 85 private: |
87 URLs::const_iterator iterator_; | 86 URLs::const_iterator iterator_; |
88 URLs::const_iterator end_; | 87 URLs::const_iterator end_; |
89 }; | 88 }; |
90 | 89 |
91 TestURLIterator::TestURLIterator(const URLs& urls) | 90 TestURLIterator::TestURLIterator(const URLs& urls) |
92 : iterator_(urls.begin()), | 91 : iterator_(urls.begin()), |
93 end_(urls.end()) { | 92 end_(urls.end()) { |
94 } | 93 } |
95 | 94 |
96 const GURL& TestURLIterator::NextURL() { | 95 const GURL& TestURLIterator::NextURL() { |
97 return *(iterator_++); | 96 return *(iterator_++); |
98 } | 97 } |
99 | 98 |
100 bool TestURLIterator::HasNextURL() const { | 99 bool TestURLIterator::HasNextURL() const { |
101 return iterator_ != end_; | 100 return iterator_ != end_; |
102 } | 101 } |
103 | 102 |
104 } // namespace | 103 } // namespace |
105 | 104 |
106 class TrackingVisitedLinkEventListener : public VisitedLinkMaster::Listener { | 105 class TrackingVisitedLinkEventListener : public VisitedLinkMaster::Listener { |
107 public: | 106 public: |
108 TrackingVisitedLinkEventListener() | 107 TrackingVisitedLinkEventListener() |
109 : reset_count_(0), | 108 : reset_count_(0), |
110 add_count_(0) {} | 109 add_count_(0) {} |
111 | 110 |
112 virtual void NewTable(base::SharedMemory* table) override { | 111 void NewTable(base::SharedMemory* table) override { |
113 if (table) { | 112 if (table) { |
114 for (std::vector<VisitedLinkSlave>::size_type i = 0; | 113 for (std::vector<VisitedLinkSlave>::size_type i = 0; |
115 i < g_slaves.size(); i++) { | 114 i < g_slaves.size(); i++) { |
116 base::SharedMemoryHandle new_handle = base::SharedMemory::NULLHandle(); | 115 base::SharedMemoryHandle new_handle = base::SharedMemory::NULLHandle(); |
117 table->ShareToProcess(base::GetCurrentProcessHandle(), &new_handle); | 116 table->ShareToProcess(base::GetCurrentProcessHandle(), &new_handle); |
118 g_slaves[i]->OnUpdateVisitedLinks(new_handle); | 117 g_slaves[i]->OnUpdateVisitedLinks(new_handle); |
119 } | 118 } |
120 } | 119 } |
121 } | 120 } |
122 virtual void Add(VisitedLinkCommon::Fingerprint) override { add_count_++; } | 121 void Add(VisitedLinkCommon::Fingerprint) override { add_count_++; } |
123 virtual void Reset() override { reset_count_++; } | 122 void Reset() override { reset_count_++; } |
124 | 123 |
125 void SetUp() { | 124 void SetUp() { |
126 reset_count_ = 0; | 125 reset_count_ = 0; |
127 add_count_ = 0; | 126 add_count_ = 0; |
128 } | 127 } |
129 | 128 |
130 int reset_count() const { return reset_count_; } | 129 int reset_count() const { return reset_count_; } |
131 int add_count() const { return add_count_; } | 130 int add_count() const { return add_count_; } |
132 | 131 |
133 private: | 132 private: |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 class VisitRelayingRenderProcessHost : public MockRenderProcessHost { | 528 class VisitRelayingRenderProcessHost : public MockRenderProcessHost { |
530 public: | 529 public: |
531 explicit VisitRelayingRenderProcessHost( | 530 explicit VisitRelayingRenderProcessHost( |
532 content::BrowserContext* browser_context) | 531 content::BrowserContext* browser_context) |
533 : MockRenderProcessHost(browser_context), widgets_(0) { | 532 : MockRenderProcessHost(browser_context), widgets_(0) { |
534 content::NotificationService::current()->Notify( | 533 content::NotificationService::current()->Notify( |
535 content::NOTIFICATION_RENDERER_PROCESS_CREATED, | 534 content::NOTIFICATION_RENDERER_PROCESS_CREATED, |
536 content::Source<RenderProcessHost>(this), | 535 content::Source<RenderProcessHost>(this), |
537 content::NotificationService::NoDetails()); | 536 content::NotificationService::NoDetails()); |
538 } | 537 } |
539 virtual ~VisitRelayingRenderProcessHost() { | 538 ~VisitRelayingRenderProcessHost() override { |
540 content::NotificationService::current()->Notify( | 539 content::NotificationService::current()->Notify( |
541 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 540 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
542 content::Source<content::RenderProcessHost>(this), | 541 content::Source<content::RenderProcessHost>(this), |
543 content::NotificationService::NoDetails()); | 542 content::NotificationService::NoDetails()); |
544 } | 543 } |
545 | 544 |
546 virtual void WidgetRestored() override { widgets_++; } | 545 void WidgetRestored() override { widgets_++; } |
547 virtual void WidgetHidden() override { widgets_--; } | 546 void WidgetHidden() override { widgets_--; } |
548 virtual int VisibleWidgetCount() const override { return widgets_; } | 547 int VisibleWidgetCount() const override { return widgets_; } |
549 | 548 |
550 virtual bool Send(IPC::Message* msg) override { | 549 bool Send(IPC::Message* msg) override { |
551 VisitCountingContext* counting_context = | 550 VisitCountingContext* counting_context = |
552 static_cast<VisitCountingContext*>( | 551 static_cast<VisitCountingContext*>( |
553 GetBrowserContext()); | 552 GetBrowserContext()); |
554 | 553 |
555 if (msg->type() == ChromeViewMsg_VisitedLink_Add::ID) { | 554 if (msg->type() == ChromeViewMsg_VisitedLink_Add::ID) { |
556 PickleIterator iter(*msg); | 555 PickleIterator iter(*msg); |
557 std::vector<uint64> fingerprints; | 556 std::vector<uint64> fingerprints; |
558 CHECK(IPC::ReadParam(msg, &iter, &fingerprints)); | 557 CHECK(IPC::ReadParam(msg, &iter, &fingerprints)); |
559 counting_context->CountAddEvent(fingerprints.size()); | 558 counting_context->CountAddEvent(fingerprints.size()); |
560 } else if (msg->type() == ChromeViewMsg_VisitedLink_Reset::ID) { | 559 } else if (msg->type() == ChromeViewMsg_VisitedLink_Reset::ID) { |
(...skipping 10 matching lines...) Expand all Loading... |
571 int widgets_; | 570 int widgets_; |
572 | 571 |
573 DISALLOW_COPY_AND_ASSIGN(VisitRelayingRenderProcessHost); | 572 DISALLOW_COPY_AND_ASSIGN(VisitRelayingRenderProcessHost); |
574 }; | 573 }; |
575 | 574 |
576 class VisitedLinkRenderProcessHostFactory | 575 class VisitedLinkRenderProcessHostFactory |
577 : public content::RenderProcessHostFactory { | 576 : public content::RenderProcessHostFactory { |
578 public: | 577 public: |
579 VisitedLinkRenderProcessHostFactory() | 578 VisitedLinkRenderProcessHostFactory() |
580 : content::RenderProcessHostFactory() {} | 579 : content::RenderProcessHostFactory() {} |
581 virtual content::RenderProcessHost* CreateRenderProcessHost( | 580 content::RenderProcessHost* CreateRenderProcessHost( |
582 content::BrowserContext* browser_context, | 581 content::BrowserContext* browser_context, |
583 content::SiteInstance* site_instance) const override { | 582 content::SiteInstance* site_instance) const override { |
584 return new VisitRelayingRenderProcessHost(browser_context); | 583 return new VisitRelayingRenderProcessHost(browser_context); |
585 } | 584 } |
586 | 585 |
587 private: | 586 private: |
588 DISALLOW_COPY_AND_ASSIGN(VisitedLinkRenderProcessHostFactory); | 587 DISALLOW_COPY_AND_ASSIGN(VisitedLinkRenderProcessHostFactory); |
589 }; | 588 }; |
590 | 589 |
591 class VisitedLinkEventsTest : public content::RenderViewHostTestHarness { | 590 class VisitedLinkEventsTest : public content::RenderViewHostTestHarness { |
592 public: | 591 public: |
593 virtual void SetUp() { | 592 virtual void SetUp() { |
594 SetRenderProcessHostFactory(&vc_rph_factory_); | 593 SetRenderProcessHostFactory(&vc_rph_factory_); |
595 content::RenderViewHostTestHarness::SetUp(); | 594 content::RenderViewHostTestHarness::SetUp(); |
596 } | 595 } |
597 | 596 |
598 virtual content::BrowserContext* CreateBrowserContext() override { | 597 content::BrowserContext* CreateBrowserContext() override { |
599 VisitCountingContext* context = new VisitCountingContext(); | 598 VisitCountingContext* context = new VisitCountingContext(); |
600 master_.reset(new VisitedLinkMaster(context, &delegate_, true)); | 599 master_.reset(new VisitedLinkMaster(context, &delegate_, true)); |
601 master_->Init(); | 600 master_->Init(); |
602 return context; | 601 return context; |
603 } | 602 } |
604 | 603 |
605 VisitCountingContext* context() { | 604 VisitCountingContext* context() { |
606 return static_cast<VisitCountingContext*>(browser_context()); | 605 return static_cast<VisitCountingContext*>(browser_context()); |
607 } | 606 } |
608 | 607 |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 content::NotificationService::current()->Notify( | 760 content::NotificationService::current()->Notify( |
762 content::NOTIFICATION_RENDERER_PROCESS_CREATED, | 761 content::NOTIFICATION_RENDERER_PROCESS_CREATED, |
763 content::Source<content::RenderProcessHost>(&different_process_host), | 762 content::Source<content::RenderProcessHost>(&different_process_host), |
764 content::NotificationService::NoDetails()); | 763 content::NotificationService::NoDetails()); |
765 WaitForCoalescense(); | 764 WaitForCoalescense(); |
766 | 765 |
767 EXPECT_EQ(0, different_context.new_table_count()); | 766 EXPECT_EQ(0, different_context.new_table_count()); |
768 } | 767 } |
769 | 768 |
770 } // namespace visitedlink | 769 } // namespace visitedlink |
OLD | NEW |