Logo Search packages:      
Sourcecode: chromium-browser version File versions  Download package

safari_importer.h

// 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_IMPORTER_SAFARI_IMPORTER_H_
#define CHROME_BROWSER_IMPORTER_SAFARI_IMPORTER_H_

#include "chrome/browser/importer/importer.h"

#include <map>
#include <set>
#include <vector>

#include "base/file_path.h"
#include "chrome/common/sqlite_utils.h"
#include "chrome/browser/importer/importer_data_types.h"
#include "testing/gtest/include/gtest/gtest_prod.h"

#if __OBJC__
@class NSDictionary;
@class NSString;
#else
class NSDictionary;
class NSString;
#endif

// Importer for Safari on OS X.
class SafariImporter : public Importer {
 public:
  // |library_dir| is the full path to the ~/Library directory,
  // We pass it in as a parameter for testing purposes.
  explicit SafariImporter(const FilePath& library_dir);

  // Importer methods.
  virtual void StartImport(importer::ProfileInfo profile_info,
                           uint16 items,
                           ImporterBridge* bridge);


 // Does this user account have a Safari Profile and if so, what items
 // are supported?
 // in: library_dir - ~/Library or a standin for testing purposes.
 // out: services_supported - the service supported for import.
 // returns true if we can import the Safari profile.
 static bool CanImport(const FilePath& library_dir, uint16 *services_supported);
 private:
  FRIEND_TEST(SafariImporterTest, BookmarkImport);
  FRIEND_TEST(SafariImporterTest, FavIconImport);
  FRIEND_TEST(SafariImporterTest, HistoryImport);

  virtual ~SafariImporter();

  // Multiple URLs can share the same FavIcon, this is a map
  // of URLs -> IconIDs that we load as a temporary step before
  // actually loading the icons.
  typedef std::map<int64, std::set<GURL> > FaviconMap;

  void ImportBookmarks();
  void ImportPasswords();
  void ImportHistory();

  // Parse Safari's stored bookmarks.
  void ParseBookmarks(std::vector<ProfileWriter::BookmarkEntry>* bookmarks);

  // Function to recursively read Bookmarks out of Safari plist.
  // |bookmark_folder| The dictionary containing a folder to parse.
  // |parent_path_elements| Path elements up to this point.
  // |is_in_toolbar| Is this folder in the toolbar.
  // |out_bookmarks| BookMark element array to write into.
  void RecursiveReadBookmarksFolder(
      NSDictionary* bookmark_folder,
      const std::vector<std::wstring>& parent_path_elements,
      bool is_in_toolbar,
      std::vector<ProfileWriter::BookmarkEntry>* out_bookmarks);


  // Converts history time stored by Safari as a double serialized as a string,
  // to seconds-since-UNIX-Ephoch-format used by Chrome.
  double HistoryTimeToEpochTime(NSString* history_time);

  // Parses Safari's history and loads it into the input array.
  void ParseHistoryItems(std::vector<history::URLRow>* history_items);

  // Loads the favicon Database file, returns NULL on failure.
  sqlite3* OpenFavIconDB();

  // Loads the urls associated with the favicons into favicon_map;
  void ImportFavIconURLs(sqlite3* db, FaviconMap* favicon_map);

  // Loads and reencodes the individual favicons.
  void LoadFaviconData(sqlite3* db,
                       const FaviconMap& favicon_map,
                       std::vector<history::ImportedFavIconUsage>* favicons);

  FilePath library_dir_;

  DISALLOW_COPY_AND_ASSIGN(SafariImporter);
};

#endif  // CHROME_BROWSER_IMPORTER_SAFARI_IMPORTER_H_

Generated by  Doxygen 1.6.0   Back to index