15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_FILEICON_SOURCE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_FILEICON_SOURCE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/task/cancelable_task_tracker.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/icon_manager.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/url_data_source.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Image; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FileIconSource is the gateway between network-level chrome: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// requests for favicons and the history backend that serves these. 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FileIconSource : public content::URLDataSource { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit FileIconSource(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content::URLDataSource implementation. 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::string GetSource() const OVERRIDE; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void StartDataRequest( 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& path, 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int render_process_id, 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::URLDataSource::GotDataCallback& callback) OVERRIDE; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetMimeType(const std::string&) const OVERRIDE; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FileIconSource(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Once the |path| and |icon_size| has been determined from the request, this 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // function is called to perform the actual fetch. Declared as virtual for 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void FetchFileIcon( 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) float scale_factor, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IconLoader::IconSize icon_size, 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::URLDataSource::GotDataCallback& callback); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains the necessary information for completing an icon fetch request. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct IconRequestDetails { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IconRequestDetails(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~IconRequestDetails(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The callback to run with the response. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::URLDataSource::GotDataCallback callback; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The requested scale factor to respond with. 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) float scale_factor; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when favicon data is available from the history backend. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnFileIconDataAvailable(const IconRequestDetails& details, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Image* icon); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tracks tasks requesting file icons. 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::CancelableTaskTracker cancelable_task_tracker_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FileIconSource); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_FILEICON_SOURCE_H_ 69