diff options
Diffstat (limited to 'chrome/browser/bookmarks/bookmark_html_writer.h')
-rw-r--r-- | chrome/browser/bookmarks/bookmark_html_writer.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/chrome/browser/bookmarks/bookmark_html_writer.h b/chrome/browser/bookmarks/bookmark_html_writer.h new file mode 100644 index 0000000..58da351 --- /dev/null +++ b/chrome/browser/bookmarks/bookmark_html_writer.h @@ -0,0 +1,112 @@ +// Copyright (c) 2010 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_ + +#include <list> +#include <map> +#include <string> + +#include "base/ref_counted.h" +#include "base/values.h" +#include "chrome/browser/history/history.h" +#include "chrome/common/notification_registrar.h" +#include "net/base/file_stream.h" + +class BookmarkModel; +class BookmarkNode; +class DictionaryValue; +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, + bool know_favicon, + scoped_refptr<RefCountedMemory> data, + bool expired, + GURL icon_url); + + // 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 fav_icon_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_ |