| // Copyright 2015 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_UI_WEBUI_FALLBACK_ICON_SOURCE_H_ |
| #define CHROME_BROWSER_UI_WEBUI_FALLBACK_ICON_SOURCE_H_ |
| |
| #include <string> |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "content/public/browser/url_data_source.h" |
| |
| class GURL; |
| |
| namespace favicon_base { |
| struct FallbackIconStyle; |
| } |
| |
| namespace favicon { |
| class FallbackIconService; |
| } |
| |
| // FallbackIconSource services explicit chrome:// requests for fallback icons. |
| // |
| // Format: |
| // chrome://fallback-icon/size,bc,tc,fsr,r/url |
| // All of the parameters except for the url are optional. However, the order of |
| // the parameters is not interchangeable, and all "," must be in place. |
| // |
| // Parameter: |
| // 'size' |
| // Positive integer to specify the fallback icon's size in pixels. |
| // 'bc' |
| // Fallback icon's background color, as named CSS color, or RGB / ARGB / |
| // RRGGBB / AARRGGBB hex formats (no leading "#"). |
| // 'tc' |
| // Fallback icon text color, as named CSS color, or RGB / ARGB / RRGGBB / |
| // AARRGGBB hex formats (no leading "#"). |
| // 'fsr' |
| // Number in [0.0, 1.0] to specify the fallback icon's font size (pixels) |
| // as a ratio to the icon's size. |
| // 'r' |
| // Number in [0.0, 1.0] to specify the fallback icon's roundness. |
| // 0.0 specifies a square icon; 1.0 specifies a circle icon; intermediate |
| // values specify a rounded square icon. |
| // 'url' |
| // String to specify the page URL of the fallback icon. |
| // |
| // Example: chrome://fallback-icon/32,red,#000,0.5,1.0/http://www.google.com/ |
| // This requests a 32x32 fallback icon for http://www.google.com, using |
| // red as the background color, #000 as the text color, with font size of |
| // 32 * 0.5 = 16, and the icon's background shape is a circle. |
| class FallbackIconSource : public content::URLDataSource { |
| public: |
| // |fallback_icon_service| is owned by caller, and may be null. |
| explicit FallbackIconSource( |
| favicon::FallbackIconService* fallback_icon_service); |
| |
| ~FallbackIconSource() override; |
| |
| // content::URLDataSource implementation. |
| std::string GetSource() const override; |
| void StartDataRequest( |
| const std::string& path, |
| int render_process_id, |
| int render_frame_id, |
| const content::URLDataSource::GotDataCallback& callback) override; |
| std::string GetMimeType(const std::string&) const override; |
| bool ShouldReplaceExistingSource() const override; |
| bool ShouldServiceRequest(const net::URLRequest* request) const override; |
| |
| private: |
| void SendFallbackIconHelper( |
| const GURL& url, |
| int size_in_pixels, |
| const favicon_base::FallbackIconStyle& style, |
| const content::URLDataSource::GotDataCallback& callback); |
| |
| // Sends the default fallback icon. |
| void SendDefaultResponse( |
| const content::URLDataSource::GotDataCallback& callback); |
| |
| favicon::FallbackIconService* fallback_icon_service_; |
| |
| DISALLOW_COPY_AND_ASSIGN(FallbackIconSource); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_WEBUI_FALLBACK_ICON_SOURCE_H_ |