Home | History | Annotate | Download | only in importer
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_UTILITY_IMPORTER_BOOKMARK_HTML_READER_H_
      6 #define CHROME_UTILITY_IMPORTER_BOOKMARK_HTML_READER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/callback_forward.h"
     12 #include "base/strings/string16.h"
     13 
     14 class GURL;
     15 struct ImportedBookmarkEntry;
     16 struct ImportedFaviconUsage;
     17 
     18 namespace base {
     19 class FilePath;
     20 class Time;
     21 }
     22 
     23 namespace bookmark_html_reader {
     24 
     25 // Imports the bookmarks from the specified file.
     26 //
     27 // |cancellation_callback| is polled to query if the import should be cancelled;
     28 // if it returns |true| at any time the import will be cancelled. If
     29 // |cancellation_callback| is a null callback the import will run to completion.
     30 //
     31 // |valid_url_callback| is called to determine if a specified URL is valid for
     32 // import; it returns |true| if it is. If |valid_url_callback| is a null
     33 // callback, all URLs are considered to be valid.
     34 //
     35 // |file_path| is the path of the file on disk to import.
     36 //
     37 // |bookmarks| is a pointer to a vector, which is filled with the imported
     38 // bookmarks. It may not be NULL.
     39 //
     40 // |favicons| is a pointer to a vector, which is filled with the favicons of
     41 // imported bookmarks. It may be NULL, in which case favicons are not imported.
     42 void ImportBookmarksFile(
     43     const base::Callback<bool(void)>& cancellation_callback,
     44     const base::Callback<bool(const GURL&)>& valid_url_callback,
     45     const base::FilePath& file_path,
     46     std::vector<ImportedBookmarkEntry>* bookmarks,
     47     std::vector<ImportedFaviconUsage>* favicons);
     48 
     49 namespace internal {
     50 
     51 // The file format that BookmarkHTMLReader parses starts with a heading
     52 // tag, which contains its title. All bookmarks and sub-folders follow,
     53 // bracketed by a <DL> tag:
     54 //   <DT><H3 PERSONAL_TOOLBAR_FOLDER="true" ...>title</H3>
     55 //   <DL><p>
     56 //      ... container ...
     57 //   </DL><p>
     58 // And a bookmark is presented by a <A> tag:
     59 //   <DT><A HREF="url" SHORTCUTURL="shortcut" ADD_DATE="11213014"...>name</A>
     60 // Reference: http://kb.mozillazine.org/Bookmarks.html
     61 
     62 bool ParseCharsetFromLine(const std::string& line,
     63                           std::string* charset);
     64 bool ParseFolderNameFromLine(const std::string& line,
     65                              const std::string& charset,
     66                              base::string16* folder_name,
     67                              bool* is_toolbar_folder,
     68                              base::Time* add_date);
     69 // See above, this will also put the data: URL of the favicon into |*favicon|
     70 // if there is a favicon given. |post_data| is set for POST base keywords to
     71 // the contents of the actual POST (with %s for the search term).
     72 bool ParseBookmarkFromLine(const std::string& line,
     73                            const std::string& charset,
     74                            base::string16* title,
     75                            GURL* url,
     76                            GURL* favicon,
     77                            base::string16* shortcut,
     78                            base::Time* add_date,
     79                            base::string16* post_data);
     80 // Save bookmarks imported from browsers with Firefox 2 compatible bookmark
     81 // systems such as Epiphany. This bookmark format is the same as that of the
     82 // basic Firefox 2 bookmark, but it misses additional properties and uses
     83 // lower-case tag:
     84 //   ...<h1>Bookmarks</h1><dl>
     85 //   <dt><a href="url">name</a></dt>
     86 //   <dt><a href="url">name</a></dt>
     87 //   </dl>
     88 bool ParseMinimumBookmarkFromLine(const std::string& line,
     89                                   const std::string& charset,
     90                                   base::string16* title,
     91                                   GURL* url);
     92 
     93 }  // namespace internal
     94 
     95 }  // namespace bookmark_html_reader
     96 
     97 #endif  // CHROME_UTILITY_IMPORTER_BOOKMARK_HTML_READER_H_
     98