Commit c02075fe authored by romax's avatar romax Committed by Commit bot

[Offline Pages] Delete associated page along with bookmark.

When deleting bookmarks we should also delete the associated offline page cache. Doing this by adding an observer owned by BookmarkModel and get initialized as part of BookmarkModel.

BUG=630796

Review-Url: https://codereview.chromium.org/2185973003
Cr-Commit-Position: refs/heads/master@{#416343}
parent 23fd3d89
...@@ -3099,6 +3099,8 @@ split_static_library("browser") { ...@@ -3099,6 +3099,8 @@ split_static_library("browser") {
"android/offline_pages/downloads/offline_page_download_bridge.h", "android/offline_pages/downloads/offline_page_download_bridge.h",
"android/offline_pages/downloads/offline_page_notification_bridge.cc", "android/offline_pages/downloads/offline_page_notification_bridge.cc",
"android/offline_pages/downloads/offline_page_notification_bridge.h", "android/offline_pages/downloads/offline_page_notification_bridge.h",
"android/offline_pages/offline_page_bookmark_observer.cc",
"android/offline_pages/offline_page_bookmark_observer.h",
"android/offline_pages/offline_page_bridge.cc", "android/offline_pages/offline_page_bridge.cc",
"android/offline_pages/offline_page_bridge.h", "android/offline_pages/offline_page_bridge.h",
"android/offline_pages/offline_page_mhtml_archiver.cc", "android/offline_pages/offline_page_mhtml_archiver.cc",
......
// Copyright 2016 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.
#include "chrome/browser/android/offline_pages/offline_page_bookmark_observer.h"
#include "chrome/browser/profiles/profile.h"
#include "components/bookmarks/browser/bookmark_node.h"
#include "components/offline_pages/client_namespace_constants.h"
#include "components/offline_pages/offline_page_model.h"
#include "url/gurl.h"
namespace offline_pages {
OfflinePageBookmarkObserver::OfflinePageBookmarkObserver(
content::BrowserContext* context)
: context_(context),
offline_page_model_(nullptr),
weak_ptr_factory_(this) {}
OfflinePageBookmarkObserver::~OfflinePageBookmarkObserver() {}
void OfflinePageBookmarkObserver::BookmarkModelChanged() {}
void OfflinePageBookmarkObserver::BookmarkNodeRemoved(
bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* parent,
int old_index,
const bookmarks::BookmarkNode* node,
const std::set<GURL>& removed_urls) {
if (!offline_page_model_) {
offline_page_model_ =
OfflinePageModelFactory::GetForBrowserContext(context_);
}
ClientId client_id = ClientId(kBookmarkNamespace, std::to_string(node->id()));
offline_page_model_->GetOfflineIdsForClientId(
client_id,
base::Bind(&OfflinePageBookmarkObserver::DoExpireRemovedBookmarkPages,
weak_ptr_factory_.GetWeakPtr()));
}
void OfflinePageBookmarkObserver::DoExpireRemovedBookmarkPages(
const MultipleOfflineIdResult& offline_ids) {
offline_page_model_->ExpirePages(
offline_ids, base::Time::Now(),
base::Bind(&OfflinePageBookmarkObserver::OnExpireRemovedBookmarkPagesDone,
weak_ptr_factory_.GetWeakPtr()));
}
void OfflinePageBookmarkObserver::OnExpireRemovedBookmarkPagesDone(
bool result) {}
} // namespace offline_pages
// Copyright 2016 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_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BOOKMARK_OBSERVER_H_
#define CHROME_BROWSER_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BOOKMARK_OBSERVER_H_
#include "base/memory/weak_ptr.h"
#include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
#include "components/bookmarks/browser/base_bookmark_model_observer.h"
#include "components/offline_pages/offline_page_types.h"
class GURL;
namespace bookmarks {
class BookmarkModel;
class BookmarkNode;
}
namespace content {
class BrowserContext;
}
namespace offline_pages {
class OfflinePageBookmarkObserver
: public bookmarks::BaseBookmarkModelObserver {
public:
explicit OfflinePageBookmarkObserver(content::BrowserContext* context);
~OfflinePageBookmarkObserver() override;
// Implement bookmarks::OfflinePageBookmarkObserver
void BookmarkModelChanged() override;
void BookmarkNodeRemoved(bookmarks::BookmarkModel* model,
const bookmarks::BookmarkNode* parent,
int old_index,
const bookmarks::BookmarkNode* node,
const std::set<GURL>& removed_urls) override;
private:
// Does work for actual expiring.
void DoExpireRemovedBookmarkPages(const MultipleOfflineIdResult& offline_ids);
// Callback for expiring removed bookmark pages.
void OnExpireRemovedBookmarkPagesDone(bool result);
content::BrowserContext* context_;
OfflinePageModel* offline_page_model_;
base::WeakPtrFactory<OfflinePageBookmarkObserver> weak_ptr_factory_;
};
} // namespace offline_pages
#endif // CHROME_BROWSER_ANDROID_OFFLINE_PAGES_OFFLINE_PAGE_BOOKMARK_OBSERVER_H_
...@@ -5,10 +5,12 @@ ...@@ -5,10 +5,12 @@
#include "chrome/browser/bookmarks/chrome_bookmark_client.h" #include "chrome/browser/bookmarks/chrome_bookmark_client.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/favicon/favicon_service_factory.h" #include "chrome/browser/favicon/favicon_service_factory.h"
#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/browser/bookmark_node.h" #include "components/bookmarks/browser/bookmark_node.h"
#include "components/bookmarks/browser/bookmark_storage.h" #include "components/bookmarks/browser/bookmark_storage.h"
#include "components/bookmarks/managed/managed_bookmark_service.h" #include "components/bookmarks/managed/managed_bookmark_service.h"
...@@ -18,6 +20,10 @@ ...@@ -18,6 +20,10 @@
#include "components/history/core/browser/url_database.h" #include "components/history/core/browser/url_database.h"
#include "content/public/browser/user_metrics.h" #include "content/public/browser/user_metrics.h"
#if BUILDFLAG(ANDROID_JAVA_UI)
#include "chrome/browser/android/offline_pages/offline_page_bookmark_observer.h"
#endif
ChromeBookmarkClient::ChromeBookmarkClient( ChromeBookmarkClient::ChromeBookmarkClient(
Profile* profile, Profile* profile,
bookmarks::ManagedBookmarkService* managed_bookmark_service) bookmarks::ManagedBookmarkService* managed_bookmark_service)
...@@ -29,6 +35,12 @@ ChromeBookmarkClient::~ChromeBookmarkClient() { ...@@ -29,6 +35,12 @@ ChromeBookmarkClient::~ChromeBookmarkClient() {
void ChromeBookmarkClient::Init(bookmarks::BookmarkModel* model) { void ChromeBookmarkClient::Init(bookmarks::BookmarkModel* model) {
if (managed_bookmark_service_) if (managed_bookmark_service_)
managed_bookmark_service_->BookmarkModelCreated(model); managed_bookmark_service_->BookmarkModelCreated(model);
#if BUILDFLAG(ANDROID_JAVA_UI)
offline_page_observer_ =
base::MakeUnique<offline_pages::OfflinePageBookmarkObserver>(profile_);
model->AddObserver(offline_page_observer_.get());
#endif
} }
bool ChromeBookmarkClient::PreferTouchIcon() { bool ChromeBookmarkClient::PreferTouchIcon() {
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#include "base/deferred_sequenced_task_runner.h" #include "base/deferred_sequenced_task_runner.h"
#include "base/macros.h" #include "base/macros.h"
#include "build/build_config.h"
#include "build/buildflag.h"
#include "chrome/common/features.h"
#include "components/bookmarks/browser/bookmark_client.h" #include "components/bookmarks/browser/bookmark_client.h"
class GURL; class GURL;
...@@ -26,6 +29,12 @@ class BookmarkPermanentNode; ...@@ -26,6 +29,12 @@ class BookmarkPermanentNode;
class ManagedBookmarkService; class ManagedBookmarkService;
} }
#if BUILDFLAG(ANDROID_JAVA_UI)
namespace offline_pages {
class OfflinePageBookmarkObserver;
}
#endif
class ChromeBookmarkClient : public bookmarks::BookmarkClient { class ChromeBookmarkClient : public bookmarks::BookmarkClient {
public: public:
ChromeBookmarkClient( ChromeBookmarkClient(
...@@ -62,6 +71,12 @@ class ChromeBookmarkClient : public bookmarks::BookmarkClient { ...@@ -62,6 +71,12 @@ class ChromeBookmarkClient : public bookmarks::BookmarkClient {
// be null during testing. // be null during testing.
bookmarks::ManagedBookmarkService* managed_bookmark_service_; bookmarks::ManagedBookmarkService* managed_bookmark_service_;
#if BUILDFLAG(ANDROID_JAVA_UI)
// Owns the observer used by Offline Page listening to Bookmark Model events.
std::unique_ptr<offline_pages::OfflinePageBookmarkObserver>
offline_page_observer_;
#endif
DISALLOW_COPY_AND_ASSIGN(ChromeBookmarkClient); DISALLOW_COPY_AND_ASSIGN(ChromeBookmarkClient);
}; };
......
...@@ -41,7 +41,6 @@ static_library("offline_pages") { ...@@ -41,7 +41,6 @@ static_library("offline_pages") {
deps = [ deps = [
":switches", ":switches",
"//base", "//base",
"//components/bookmarks/browser",
"//components/keyed_service/core", "//components/keyed_service/core",
"//net", "//net",
"//sql:sql", "//sql:sql",
......
...@@ -278,7 +278,7 @@ class OfflinePageModelImpl : public OfflinePageModel, public KeyedService { ...@@ -278,7 +278,7 @@ class OfflinePageModelImpl : public OfflinePageModel, public KeyedService {
bool is_loaded_; bool is_loaded_;
// In memory copy of the offline page metadata, keyed by bookmark IDs. // In memory copy of the offline page metadata, keyed by offline IDs.
std::map<int64_t, OfflinePageItem> offline_pages_; std::map<int64_t, OfflinePageItem> offline_pages_;
// Pending archivers owned by this model. // Pending archivers owned by this model.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment