| Index: chrome/browser/dom_ui/new_tab_ui.cc
|
| ===================================================================
|
| --- chrome/browser/dom_ui/new_tab_ui.cc (revision 52977)
|
| +++ chrome/browser/dom_ui/new_tab_ui.cc (working copy)
|
| @@ -15,7 +15,9 @@
|
| #include "base/i18n/rtl.h"
|
| #include "base/singleton.h"
|
| #include "base/thread.h"
|
| +#include "chrome/browser/bookmarks/bookmark_model.h"
|
| #include "chrome/browser/browser.h"
|
| +#include "chrome/browser/browser_window.h"
|
| #include "chrome/browser/chrome_thread.h"
|
| #include "chrome/browser/dom_ui/app_launcher_handler.h"
|
| #include "chrome/browser/dom_ui/dom_ui_theme_source.h"
|
| @@ -24,6 +26,7 @@
|
| #include "chrome/browser/dom_ui/ntp_resource_cache.h"
|
| #include "chrome/browser/dom_ui/shown_sections_handler.h"
|
| #include "chrome/browser/dom_ui/tips_handler.h"
|
| +#include "chrome/browser/importer/importer_data_types.h"
|
| #include "chrome/browser/metrics/user_metrics.h"
|
| #include "chrome/browser/pref_service.h"
|
| #include "chrome/browser/profile.h"
|
| @@ -38,6 +41,11 @@
|
| #include "chrome/common/url_constants.h"
|
| #include "grit/generated_resources.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include "chrome/browser/views/importer_view.h"
|
| +#include "views/window/window.h"
|
| +#endif
|
| +
|
| namespace {
|
|
|
| // The number of recent bookmarks we show.
|
| @@ -429,6 +437,43 @@
|
| dom_ui_->CallJavascriptFunction(L"onHomePageSet", list_value);
|
| }
|
|
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +// NewTabPageImportBookmarksHandler
|
| +class NewTabPageImportBookmarksHandler : public DOMMessageHandler {
|
| + public:
|
| + NewTabPageImportBookmarksHandler() {}
|
| + virtual ~NewTabPageImportBookmarksHandler() {}
|
| +
|
| + // DOMMessageHandler implementation.
|
| + virtual void RegisterMessages();
|
| +
|
| + // Callback for "importBookmarks".
|
| + void HandleImportBookmarks(const Value* value);
|
| + private:
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(NewTabPageImportBookmarksHandler);
|
| +};
|
| +
|
| +void NewTabPageImportBookmarksHandler::RegisterMessages() {
|
| + dom_ui_->RegisterMessageCallback("importBookmarks", NewCallback(
|
| + this, &NewTabPageImportBookmarksHandler::HandleImportBookmarks));
|
| +}
|
| +
|
| +void NewTabPageImportBookmarksHandler::HandleImportBookmarks(
|
| + const Value* value) {
|
| + Browser* browser = NULL;
|
| + TabContentsDelegate* delegate = dom_ui_->tab_contents()->delegate();
|
| + if (delegate)
|
| + browser = delegate->GetBrowser();
|
| + DCHECK(browser);
|
| +#if defined(OS_WIN)
|
| + views::Window::CreateChromeWindow(
|
| + browser->window()->GetNativeHandle(),
|
| + gfx::Rect(),
|
| + new ImporterView(dom_ui_->GetProfile(), importer::FAVORITES))->Show();
|
| +#endif
|
| +}
|
| +
|
| } // namespace
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -454,6 +499,10 @@
|
|
|
| static bool first_view = true;
|
| if (first_view) {
|
| + Profile* profile = GetProfile();
|
| + profile->GetPrefs()->SetInteger(prefs::kNTPPromoViewsRemaining,
|
| + profile->GetPrefs()->GetInteger(prefs::kNTPPromoViewsRemaining) - 1);
|
| + profile->GetBookmarkModel()->AddObserver(this);
|
| first_view = false;
|
| }
|
|
|
| @@ -476,6 +525,7 @@
|
| }
|
|
|
| AddMessageHandler((new NewTabPageSetHomePageHandler())->Attach(this));
|
| + AddMessageHandler((new NewTabPageImportBookmarksHandler())->Attach(this));
|
| }
|
|
|
| // Initializing the CSS and HTML can require some CPU, so do it after
|
| @@ -500,6 +550,9 @@
|
| }
|
|
|
| NewTabUI::~NewTabUI() {
|
| + BookmarkModel* bookmark_model = GetProfile()->GetBookmarkModel();
|
| + if (bookmark_model)
|
| + bookmark_model->RemoveObserver(this);
|
| }
|
|
|
| void NewTabUI::RenderViewCreated(RenderViewHost* render_view_host) {
|
| @@ -510,6 +563,14 @@
|
| render_view_host->set_paint_observer(new PaintTimer);
|
| }
|
|
|
| +void NewTabUI::BookmarkNodeAdded(BookmarkModel* model,
|
| + const BookmarkNode* parent,
|
| + int index) {
|
| + // Stop showing the promo, and no longer observe the bookmark model.
|
| + GetProfile()->GetPrefs()->SetInteger(prefs::kNTPPromoViewsRemaining, 0);
|
| + GetProfile()->GetBookmarkModel()->RemoveObserver(this);
|
| +}
|
| +
|
| void NewTabUI::Observe(NotificationType type,
|
| const NotificationSource& source,
|
| const NotificationDetails& details) {
|
|
|