| // Copyright (c) 2011 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_BOOKMARKS_BOOKMARK_HTML_WRITER_H_ |
| #define CHROME_BROWSER_BOOKMARKS_BOOKMARK_HTML_WRITER_H_ |
| #pragma once |
| |
| #include <list> |
| #include <map> |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "chrome/browser/history/history.h" |
| #include "content/common/notification_registrar.h" |
| #include "net/base/file_stream.h" |
| |
| class BookmarkNode; |
| class FilePath; |
| class GURL; |
| class Profile; |
| |
| // Observer for bookmark html output. Used only in tests. |
| class BookmarksExportObserver { |
| public: |
| // Is invoked on the IO thread. |
| virtual void OnExportFinished() = 0; |
| |
| protected: |
| virtual ~BookmarksExportObserver() {} |
| }; |
| |
| // Class that fetches favicons for list of bookmarks and |
| // then starts Writer which outputs bookmarks and favicons to html file. |
| // Should be used only by WriteBookmarks function. |
| class BookmarkFaviconFetcher: public NotificationObserver { |
| public: |
| // Map of URL and corresponding favicons. |
| typedef std::map<std::string, scoped_refptr<RefCountedMemory> > URLFaviconMap; |
| |
| BookmarkFaviconFetcher(Profile* profile, |
| const FilePath& path, |
| BookmarksExportObserver* observer); |
| ~BookmarkFaviconFetcher(); |
| |
| // Executes bookmark export process. |
| void ExportBookmarks(); |
| |
| // NotificationObserver implementation. |
| virtual void Observe(NotificationType type, |
| const NotificationSource& source, |
| const NotificationDetails& details); |
| |
| private: |
| // Recursively extracts URLs from bookmarks. |
| void ExtractUrls(const BookmarkNode* node); |
| |
| // Executes Writer task that writes bookmarks data to html file. |
| void ExecuteWriter(); |
| |
| // Starts async fetch for the next bookmark favicon. |
| // Takes single url from bookmark_urls_ and removes it from the list. |
| // Returns true if there are more favicons to extract. |
| bool FetchNextFavicon(); |
| |
| // Favicon fetch callback. After all favicons are fetched executes |
| // html output on the file thread. |
| void OnFaviconDataAvailable(FaviconService::Handle handle, |
| history::FaviconData favicon); |
| |
| // The Profile object used for accessing FaviconService, bookmarks model. |
| Profile* profile_; |
| |
| // All URLs that are extracted from bookmarks. Used to fetch favicons |
| // for each of them. After favicon is fetched top url is removed from list. |
| std::list<std::string> bookmark_urls_; |
| |
| // Consumer for requesting favicons. |
| CancelableRequestConsumer favicon_consumer_; |
| |
| // Map that stores favicon per URL. |
| scoped_ptr<URLFaviconMap> favicons_map_; |
| |
| // Path where html output is stored. |
| FilePath path_; |
| |
| BookmarksExportObserver* observer_; |
| |
| NotificationRegistrar registrar_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BookmarkFaviconFetcher); |
| }; |
| |
| namespace bookmark_html_writer { |
| |
| // Writes the bookmarks out in the 'bookmarks.html' format understood by |
| // Firefox and IE. The results are written to the file at |path|. The file |
| // thread is used. |
| // Before writing to the file favicons are fetched on the main thread. |
| // TODO(sky): need a callback on failure. |
| void WriteBookmarks(Profile* profile, |
| const FilePath& path, |
| BookmarksExportObserver* observer); |
| |
| } // namespace bookmark_html_writer |
| |
| #endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_HTML_WRITER_H_ |