Chromium Code Reviews| Index: chrome/browser/android/offline_pages/offline_page_utils.cc |
| diff --git a/chrome/browser/android/offline_pages/offline_page_utils.cc b/chrome/browser/android/offline_pages/offline_page_utils.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..06d4f013f694b343751f249ed2ccb106ef54401e |
| --- /dev/null |
| +++ b/chrome/browser/android/offline_pages/offline_page_utils.cc |
| @@ -0,0 +1,136 @@ |
| +// Copyright 2015 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_utils.h" |
| + |
| +#include "base/strings/string_piece.h" |
| +#include "base/strings/string_util.h" |
| +#include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" |
| +#include "chrome/browser/android/offline_pages/offline_page_model_factory.h" |
| +#include "components/offline_pages/offline_page_feature.h" |
| +#include "components/offline_pages/offline_page_item.h" |
| +#include "components/offline_pages/offline_page_model.h" |
| +#include "content/public/browser/browser_context.h" |
| +#include "url/gurl.h" |
| + |
| +namespace offline_pages { |
| +namespace android { |
| + |
| +namespace { |
| + |
| +// Returns an offline page related to the |online_url\, if one exists in the |
|
jianli
2015/12/15 01:45:24
\ => |
also, suggest removing if part since it cau
fgorski
2015/12/15 16:33:01
Done.
|
| +// |browser_context|. |
| +const offline_pages::OfflinePageItem* GetOfflinePageByOnlineURL( |
| + content::BrowserContext* browser_context, |
| + const GURL& online_url) { |
| + DCHECK(browser_context); |
| + |
| + if (!offline_pages::IsOfflinePagesEnabled()) |
| + return nullptr; |
| + |
| + offline_pages::OfflinePageModel* offline_page_model = |
| + offline_pages::OfflinePageModelFactory::GetForBrowserContext( |
| + browser_context); |
| + if (!offline_page_model) |
| + return nullptr; |
| + |
| + return offline_page_model->GetPageByOnlineURL(online_url); |
| +} |
| + |
| +// Returns an offline page related to the |offline_url\, if one exists in the |
|
jianli
2015/12/15 01:45:24
\ => |
also, suggest removing if part since it cau
fgorski
2015/12/15 16:33:01
Done.
|
| +// |browser_context|. |
| +const offline_pages::OfflinePageItem* GetOfflinePageByOfflineURL( |
| + content::BrowserContext* browser_context, |
| + const GURL& offline_url) { |
| + DCHECK(browser_context); |
| + |
| + if (!offline_pages::IsOfflinePagesEnabled()) |
| + return nullptr; |
| + |
| + // Note that we first check if the url likely points to an offline page |
| + // before calling GetPageByOfflineURL in order to avoid unnecessary lookup |
| + // cost. |
| + if (!MightBeOfflineURL(offline_url)) |
| + return nullptr; |
| + |
| + offline_pages::OfflinePageModel* offline_page_model = |
| + offline_pages::OfflinePageModelFactory::GetForBrowserContext( |
| + browser_context); |
| + |
| + // TODO: bail out if model is null |
|
jianli
2015/12/15 01:45:24
nit: either add DCHECK or do the bailout now.
fgorski
2015/12/15 16:33:01
Done.
|
| + return offline_page_model->GetPageByOfflineURL(offline_url); |
| +} |
| + |
| +} // namespace |
| + |
| +bool MightBeOfflineURL(const GURL& url) { |
| + // It has to be a file URL ending with .mhtml extension. |
| + return url.is_valid() && url.SchemeIsFile() && |
| + base::EndsWith(url.spec(), |
| + OfflinePageMHTMLArchiver::GetFileNameExtension(), |
| + base::CompareCase::INSENSITIVE_ASCII); |
| +} |
| + |
| +GURL GetOfflineURLByOnlineURL(content::BrowserContext* browser_context, |
| + const GURL& online_url) { |
| + const offline_pages::OfflinePageItem* offline_page = |
| + GetOfflinePageByOnlineURL(browser_context, online_url); |
| + if (!offline_page) |
| + return GURL::EmptyGURL(); |
|
jianli
2015/12/15 01:45:24
We should return GURL() since here we don't return
fgorski
2015/12/15 16:33:02
Done.
|
| + |
| + return offline_page->GetOfflineURL(); |
| +} |
| + |
| +GURL GetOnlineURLByOfflineURL(content::BrowserContext* browser_context, |
| + const GURL& offline_url) { |
| + DCHECK(browser_context); |
| + |
| + const offline_pages::OfflinePageItem* offline_page = |
| + GetOfflinePageByOfflineURL(browser_context, offline_url); |
| + if (!offline_page) |
| + return GURL::EmptyGURL(); |
|
jianli
2015/12/15 01:45:24
ditto
fgorski
2015/12/15 16:33:01
Done.
|
| + |
| + return offline_page->url; |
| +} |
| + |
| +int64 GetBookmarkIdByOfflineURL(content::BrowserContext* browser_context, |
| + const GURL& offline_url) { |
| + DCHECK(browser_context); |
| + |
| + const offline_pages::OfflinePageItem* offline_page = |
| + GetOfflinePageByOfflineURL(browser_context, offline_url); |
| + if (!offline_page) |
| + return -1; |
| + |
| + return offline_page->bookmark_id; |
| +} |
| + |
| +bool IsOfflinePage(content::BrowserContext* browser_context, |
| + const GURL& offline_url) { |
| + DCHECK(browser_context); |
| + |
| + return GetOfflinePageByOfflineURL(browser_context, offline_url) != nullptr; |
| +} |
| + |
| +bool HasOfflinePageForOnlineURL(content::BrowserContext* browser_context, |
| + const GURL& online_url) { |
| + const offline_pages::OfflinePageItem* offline_page = |
| + GetOfflinePageByOnlineURL(browser_context, online_url); |
| + return offline_page && !offline_page->file_path.empty(); |
| +} |
| + |
| +const bool HasOfflinePages(content::BrowserContext* browser_context) { |
| + DCHECK(browser_context); |
| + |
| + if (!offline_pages::IsOfflinePagesEnabled()) |
| + return false; |
| + |
| + offline_pages::OfflinePageModel* offline_page_model = |
| + offline_pages::OfflinePageModelFactory::GetForBrowserContext( |
| + browser_context); |
| + return !offline_page_model->GetAllPages().empty(); |
| +} |
| + |
| +} // namespace android |
| +} // namespace offline_pages |