blob: f6829d14d0347ce98a6b4af1e40789573c1a0d1e [file] [log] [blame]
// Copyright 2017 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 "components/offline_pages/core/model/offline_page_model_utils.h"
#include <string>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "build/build_config.h"
#include "components/filename_generation/filename_generation.h"
#include "components/offline_pages/core/client_namespace_constants.h"
#include "components/offline_pages/core/offline_page_item.h"
namespace offline_pages {
namespace model_utils {
OfflinePagesNamespaceEnumeration ToNamespaceEnum(
const std::string& name_space) {
if (name_space == kDefaultNamespace)
return OfflinePagesNamespaceEnumeration::DEFAULT;
else if (name_space == kBookmarkNamespace)
return OfflinePagesNamespaceEnumeration::BOOKMARK;
else if (name_space == kLastNNamespace)
return OfflinePagesNamespaceEnumeration::LAST_N;
else if (name_space == kAsyncNamespace)
return OfflinePagesNamespaceEnumeration::ASYNC_LOADING;
else if (name_space == kCCTNamespace)
return OfflinePagesNamespaceEnumeration::CUSTOM_TABS;
else if (name_space == kDownloadNamespace)
return OfflinePagesNamespaceEnumeration::DOWNLOAD;
else if (name_space == kNTPSuggestionsNamespace)
return OfflinePagesNamespaceEnumeration::NTP_SUGGESTION;
else if (name_space == kSuggestedArticlesNamespace)
return OfflinePagesNamespaceEnumeration::SUGGESTED_ARTICLES;
else if (name_space == kBrowserActionsNamespace)
return OfflinePagesNamespaceEnumeration::BROWSER_ACTIONS;
else if (name_space == kLivePageSharingNamespace)
return OfflinePagesNamespaceEnumeration::LIVE_PAGE_SHARING;
NOTREACHED();
return OfflinePagesNamespaceEnumeration::DEFAULT;
}
std::string AddHistogramSuffix(const std::string& name_space,
const char* histogram_name) {
if (name_space.empty()) {
NOTREACHED();
return histogram_name;
}
std::string adjusted_histogram_name(histogram_name);
adjusted_histogram_name += ".";
adjusted_histogram_name += name_space;
return adjusted_histogram_name;
}
base::FilePath GenerateUniqueFilenameForOfflinePage(
const base::string16& title,
const GURL& url,
const base::FilePath& target_dir) {
std::string kMHTMLMimeType = "multipart/related";
// Get the suggested file name based on title and url.
base::FilePath suggested_path =
target_dir.Append(filename_generation::GenerateFilename(
title, url, false /* can_save_as_complete */, kMHTMLMimeType));
// Find a unique name based on |suggested_path|.
int uniquifier =
base::GetUniquePathNumber(suggested_path, base::FilePath::StringType());
base::FilePath::StringType suffix;
if (uniquifier > 0)
#if defined(OS_WIN)
suffix = base::StringPrintf(L" (%d)", uniquifier);
#else // defined(OS_WIN)
suffix = base::StringPrintf(" (%d)", uniquifier);
#endif // defined(OS_WIN)
// Truncation.
int max_path_component_length =
base::GetMaximumPathComponentLength(target_dir);
if (max_path_component_length != -1) {
int limit = max_path_component_length -
suggested_path.Extension().length() - suffix.length();
if (limit <= 0 ||
!filename_generation::TruncateFilename(&suggested_path, limit))
return base::FilePath();
}
// Adding uniquifier suffix if needed.
if (uniquifier > 0)
suggested_path = suggested_path.InsertBeforeExtension(suffix);
return suggested_path;
}
} // namespace model_utils
} // namespace offline_pages