Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: chrome/browser/ui/webui/engagement/site_engagement_ui.cc

Issue 2788413003: Add SiteEngagementService::GetAllDetails(), to return detailed scores. (Closed)
Patch Set: Fix notifications permission logic & test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/ui/webui/engagement/site_engagement_ui.h" 5 #include "chrome/browser/ui/webui/engagement/site_engagement_ui.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "chrome/browser/engagement/site_engagement_service.h" 12 #include "chrome/browser/engagement/site_engagement_service.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/common/url_constants.h" 14 #include "chrome/common/url_constants.h"
15 #include "chrome/grit/browser_resources.h" 15 #include "chrome/grit/browser_resources.h"
16 #include "content/public/browser/web_ui.h" 16 #include "content/public/browser/web_ui.h"
17 #include "content/public/browser/web_ui_controller.h" 17 #include "content/public/browser/web_ui_controller.h"
18 #include "content/public/browser/web_ui_data_source.h" 18 #include "content/public/browser/web_ui_data_source.h"
19 #include "mojo/public/cpp/bindings/binding.h" 19 #include "mojo/public/cpp/bindings/binding.h"
20 20
21 namespace { 21 namespace {
22 22
23 // Implementation of mojom::SiteEngagementUIHandler that gets information from 23 // Implementation of mojom::SiteEngagementDetailsProvider that gets information
24 // the 24 // from the SiteEngagementService to provide data for the WebUI.
25 // SiteEngagementService to provide data for the WebUI. 25 class SiteEngagementDetailsProviderImpl
26 class SiteEngagementUIHandlerImpl : public mojom::SiteEngagementUIHandler { 26 : public mojom::SiteEngagementDetailsProvider {
27 public: 27 public:
28 // SiteEngagementUIHandlerImpl is deleted when the supplied pipe is destroyed. 28 // Instance is deleted when the supplied pipe is destroyed.
29 SiteEngagementUIHandlerImpl( 29 SiteEngagementDetailsProviderImpl(
30 Profile* profile, 30 Profile* profile,
31 mojo::InterfaceRequest<mojom::SiteEngagementUIHandler> request) 31 mojo::InterfaceRequest<mojom::SiteEngagementDetailsProvider> request)
32 : profile_(profile), binding_(this, std::move(request)) { 32 : profile_(profile), binding_(this, std::move(request)) {
33 DCHECK(profile_); 33 DCHECK(profile_);
34 } 34 }
35 35
36 ~SiteEngagementUIHandlerImpl() override {} 36 ~SiteEngagementDetailsProviderImpl() override {}
37 37
38 // mojom::SiteEngagementUIHandler overrides: 38 // mojom::SiteEngagementDetailsProvider overrides:
39 void GetSiteEngagementInfo( 39 void GetSiteEngagementDetails(
40 const GetSiteEngagementInfoCallback& callback) override { 40 const GetSiteEngagementDetailsCallback& callback) override {
41 SiteEngagementService* service = SiteEngagementService::Get(profile_); 41 SiteEngagementService* service = SiteEngagementService::Get(profile_);
42 std::map<GURL, double> score_map = service->GetScoreMap(); 42 std::vector<mojom::SiteEngagementDetails> scores = service->GetAllDetails();
43 43
44 std::vector<mojom::SiteEngagementInfoPtr> engagement_info; 44 std::vector<mojom::SiteEngagementDetailsPtr> engagement_info;
45 engagement_info.reserve(score_map.size()); 45 engagement_info.reserve(scores.size());
46 for (const auto& info : score_map) { 46 for (const auto& info : scores) {
47 mojom::SiteEngagementInfoPtr origin_info( 47 mojom::SiteEngagementDetailsPtr origin_info(
48 mojom::SiteEngagementInfo::New()); 48 mojom::SiteEngagementDetails::New());
49 origin_info->origin = info.first; 49 *origin_info = std::move(info);
50 origin_info->score = info.second;
51 engagement_info.push_back(std::move(origin_info)); 50 engagement_info.push_back(std::move(origin_info));
52 } 51 }
53 52
54 callback.Run(std::move(engagement_info)); 53 callback.Run(std::move(engagement_info));
55 } 54 }
56 55
57 void SetSiteEngagementScoreForOrigin(const GURL& origin, 56 void SetSiteEngagementBaseScoreForUrl(const GURL& origin,
58 double score) override { 57 double score) override {
59 if (!origin.is_valid() || score < 0 || 58 if (!origin.is_valid() || score < 0 ||
60 score > SiteEngagementService::GetMaxPoints() || std::isnan(score)) { 59 score > SiteEngagementService::GetMaxPoints() || std::isnan(score)) {
61 return; 60 return;
62 } 61 }
63 62
64 SiteEngagementService* service = SiteEngagementService::Get(profile_); 63 SiteEngagementService* service = SiteEngagementService::Get(profile_);
65 service->ResetBaseScoreForURL(origin, score); 64 service->ResetBaseScoreForURL(origin, score);
66 } 65 }
67 66
68 private: 67 private:
69 // The Profile* handed to us in our constructor. 68 // The Profile* handed to us in our constructor.
70 Profile* profile_; 69 Profile* profile_;
71 70
72 mojo::Binding<mojom::SiteEngagementUIHandler> binding_; 71 mojo::Binding<mojom::SiteEngagementDetailsProvider> binding_;
73 72
74 DISALLOW_COPY_AND_ASSIGN(SiteEngagementUIHandlerImpl); 73 DISALLOW_COPY_AND_ASSIGN(SiteEngagementDetailsProviderImpl);
75 }; 74 };
76 75
77 } // namespace 76 } // namespace
78 77
79 SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui) 78 SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui)
80 : MojoWebUIController<mojom::SiteEngagementUIHandler>(web_ui) { 79 : MojoWebUIController<mojom::SiteEngagementDetailsProvider>(web_ui) {
81 // Set up the chrome://site-engagement/ source. 80 // Set up the chrome://site-engagement/ source.
82 std::unique_ptr<content::WebUIDataSource> source( 81 std::unique_ptr<content::WebUIDataSource> source(
83 content::WebUIDataSource::Create(chrome::kChromeUISiteEngagementHost)); 82 content::WebUIDataSource::Create(chrome::kChromeUISiteEngagementHost));
84 source->AddResourcePath("site_engagement.js", IDR_SITE_ENGAGEMENT_JS); 83 source->AddResourcePath("site_engagement.js", IDR_SITE_ENGAGEMENT_JS);
85 source->AddResourcePath("chrome/browser/engagement/site_engagement.mojom", 84 source->AddResourcePath(
86 IDR_SITE_ENGAGEMENT_MOJO_JS); 85 "chrome/browser/engagement/site_engagement_details.mojom",
86 IDR_SITE_ENGAGEMENT_MOJO_JS);
87 source->AddResourcePath("url/mojo/url.mojom", IDR_URL_MOJO_JS); 87 source->AddResourcePath("url/mojo/url.mojom", IDR_URL_MOJO_JS);
88 source->SetDefaultResource(IDR_SITE_ENGAGEMENT_HTML); 88 source->SetDefaultResource(IDR_SITE_ENGAGEMENT_HTML);
89 source->UseGzip(std::unordered_set<std::string>()); 89 source->UseGzip(std::unordered_set<std::string>());
90 content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source.release()); 90 content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source.release());
91 } 91 }
92 92
93 SiteEngagementUI::~SiteEngagementUI() {} 93 SiteEngagementUI::~SiteEngagementUI() {}
94 94
95 void SiteEngagementUI::BindUIHandler( 95 void SiteEngagementUI::BindUIHandler(
96 mojo::InterfaceRequest<mojom::SiteEngagementUIHandler> request) { 96 mojo::InterfaceRequest<mojom::SiteEngagementDetailsProvider> request) {
97 ui_handler_.reset(new SiteEngagementUIHandlerImpl( 97 ui_handler_.reset(new SiteEngagementDetailsProviderImpl(
98 Profile::FromWebUI(web_ui()), std::move(request))); 98 Profile::FromWebUI(web_ui()), std::move(request)));
99 } 99 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698