| Index: chrome/browser/safe_browsing/notification_image_reporter.h
|
| diff --git a/chrome/browser/safe_browsing/notification_image_reporter.h b/chrome/browser/safe_browsing/notification_image_reporter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dc90e3ab5797e85395599c933087b9fd4ee983f4
|
| --- /dev/null
|
| +++ b/chrome/browser/safe_browsing/notification_image_reporter.h
|
| @@ -0,0 +1,90 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_SAFE_BROWSING_NOTIFICATION_IMAGE_REPORTER_H_
|
| +#define CHROME_BROWSER_SAFE_BROWSING_NOTIFICATION_IMAGE_REPORTER_H_
|
| +
|
| +#include <memory>
|
| +#include <queue>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/time/time.h"
|
| +
|
| +class GURL;
|
| +class Profile;
|
| +class SkBitmap;
|
| +
|
| +namespace base {
|
| +class RefCountedMemory;
|
| +} // namespace base
|
| +
|
| +namespace gfx {
|
| +class Size;
|
| +} // namespace gfx
|
| +
|
| +namespace net {
|
| +class ReportSender;
|
| +class URLRequestContext;
|
| +} // namespace net
|
| +
|
| +namespace safe_browsing {
|
| +
|
| +class SafeBrowsingService;
|
| +
|
| +// Provides functionality for building and sending reports about notification
|
| +// content images to the Safe Browsing CSD server.
|
| +class NotificationImageReporter
|
| + : public base::RefCountedThreadSafe<NotificationImageReporter> {
|
| + public:
|
| + explicit NotificationImageReporter(net::URLRequestContext* request_context);
|
| +
|
| + // Report notification content image to SafeBrowsing CSD server if the user
|
| + // has opted in, the origin is not whitelisted, and it is randomly sampled.
|
| + // Can only be called on UI thread.
|
| + void ReportNotificationImageOnUI(Profile* profile,
|
| + const GURL& origin,
|
| + const SkBitmap& image);
|
| +
|
| + protected:
|
| + explicit NotificationImageReporter(
|
| + std::unique_ptr<net::ReportSender> report_sender);
|
| + virtual ~NotificationImageReporter();
|
| +
|
| + // Fraction of images to randomly report.
|
| + virtual double GetReportChance();
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<NotificationImageReporter>;
|
| +
|
| + // Report notification content image to SafeBrowsing CSD server if necessary.
|
| + void ReportNotificationImageOnIO(
|
| + scoped_refptr<SafeBrowsingService> safe_browsing_service,
|
| + const GURL& origin,
|
| + const SkBitmap& image);
|
| +
|
| + // Downscales image to fit within 512x512 if necessary, and encodes as it PNG.
|
| + void DownscaleNotificationImageOnBlockingPool(const GURL& origin,
|
| + const SkBitmap& image);
|
| +
|
| + // Serializes report using NotificationImageReportRequest protobuf defined in
|
| + // chrome/common/safe_browsing/csd.proto and sends it to CSD server.
|
| + void SendReportOnIO(const GURL& origin,
|
| + scoped_refptr<base::RefCountedMemory> png_data,
|
| + const gfx::Size& dimensions,
|
| + const gfx::Size& original_dimensions);
|
| +
|
| + std::unique_ptr<net::ReportSender> report_sender_;
|
| +
|
| + // Timestamps of when we sent notification images. Used to limit the number
|
| + // of requests that we send in a day. Only access on the IO thread.
|
| + // TODO(johnme): Serialize this so that it doesn't reset on browser restart.
|
| + std::queue<base::Time> report_times_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NotificationImageReporter);
|
| +};
|
| +
|
| +} // namespace safe_browsing
|
| +
|
| +#endif // CHROME_BROWSER_SAFE_BROWSING_NOTIFICATION_IMAGE_REPORTER_H_
|
|
|