// 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 #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_