Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Unified Diff: ios/chrome/browser/reading_list/offline_url_utils.cc

Issue 2800673002: [iOS Reading List] Only allow offline URL when the offline file exists. (Closed)
Patch Set: Update comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/reading_list/offline_url_utils.cc
diff --git a/ios/chrome/browser/reading_list/offline_url_utils.cc b/ios/chrome/browser/reading_list/offline_url_utils.cc
index 2964725836e32b47b76715379ea39ee5edb2d978..9d41df72074d6b3058243e6a2a67c33eead36489 100644
--- a/ios/chrome/browser/reading_list/offline_url_utils.cc
+++ b/ios/chrome/browser/reading_list/offline_url_utils.cc
@@ -10,6 +10,8 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "components/reading_list/core/offline_url_utils.h"
+#include "components/reading_list/core/reading_list_entry.h"
+#include "components/reading_list/core/reading_list_model.h"
#include "ios/chrome/browser/chrome_url_constants.h"
#include "net/base/url_util.h"
@@ -23,21 +25,19 @@ namespace reading_list {
GURL OfflineURLForPath(const base::FilePath& distilled_path,
const GURL& entry_url,
const GURL& virtual_url) {
- if (distilled_path.empty()) {
- return GURL();
- }
+ DCHECK(!distilled_path.empty());
+ DCHECK(entry_url.is_valid());
+ DCHECK(virtual_url.is_valid());
GURL page_url(kChromeUIOfflineURL);
GURL::Replacements replacements;
replacements.SetPathStr(distilled_path.value());
page_url = page_url.ReplaceComponents(replacements);
- if (entry_url.is_valid()) {
- page_url = net::AppendQueryParameter(page_url, kEntryURLQueryParam,
- entry_url.spec());
- }
- if (virtual_url.is_valid()) {
- page_url = net::AppendQueryParameter(page_url, kVirtualURLQueryParam,
- virtual_url.spec());
- }
+ page_url = net::AppendQueryParameter(page_url, kEntryURLQueryParam,
+ entry_url.spec());
+
+ page_url = net::AppendQueryParameter(page_url, kVirtualURLQueryParam,
+ virtual_url.spec());
+
return page_url;
}
@@ -50,7 +50,7 @@ GURL EntryURLForOfflineURL(const GURL& offline_url) {
return entry_url;
}
}
- return offline_url;
+ return GURL::EmptyGURL();
}
GURL VirtualURLForOfflineURL(const GURL& offline_url) {
@@ -62,7 +62,7 @@ GURL VirtualURLForOfflineURL(const GURL& offline_url) {
return virtual_url;
}
}
- return EntryURLForOfflineURL(offline_url);
+ return GURL::EmptyGURL();
}
GURL FileURLForDistilledURL(const GURL& distilled_url,
@@ -84,4 +84,24 @@ GURL FileURLForDistilledURL(const GURL& distilled_url,
bool IsOfflineURL(const GURL& url) {
return url.SchemeIs(kChromeUIScheme) && url.host() == kChromeUIOfflineHost;
}
+
+bool IsOfflineURLValid(const GURL& url, ReadingListModel* model) {
+ if (!IsOfflineURL(url)) {
+ return false;
+ }
+ GURL entry_url = EntryURLForOfflineURL(url);
+ if (!entry_url.is_valid() || !model || !model->loaded()) {
+ return false;
+ }
+ const ReadingListEntry* entry = model->GetEntryByURL(entry_url);
+ if (!entry || entry->DistilledState() != ReadingListEntry::PROCESSED) {
+ return false;
+ }
+ // It is possible (unlikely) for a user to type directly a URL that passes all
+ // the tests above but still is not exactly the one returned by
+ // |OfflineURLForPath|. Make a final test to check it.
+ return url == reading_list::OfflineURLForPath(entry->DistilledPath(),
+ entry->URL(),
+ entry->DistilledURL());
+}
}
« no previous file with comments | « ios/chrome/browser/reading_list/offline_url_utils.h ('k') | ios/chrome/browser/reading_list/offline_url_utils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698