| Index: chrome/browser/android/history/browsing_history_bridge.cc
|
| diff --git a/chrome/browser/android/history/browsing_history_bridge.cc b/chrome/browser/android/history/browsing_history_bridge.cc
|
| index 9fcd8a0dc7133e9b4fa33ea52b7551ba3bf123a0..b747ae6efc8559a515d4ceedd0224c316a96a369 100644
|
| --- a/chrome/browser/android/history/browsing_history_bridge.cc
|
| +++ b/chrome/browser/android/history/browsing_history_bridge.cc
|
| @@ -6,6 +6,8 @@
|
|
|
| #include <jni.h>
|
|
|
| +#include <utility>
|
| +
|
| #include "base/android/jni_android.h"
|
| #include "base/android/jni_array.h"
|
| #include "base/android/jni_string.h"
|
| @@ -61,32 +63,30 @@ void BrowsingHistoryBridge::OnQueryComplete(
|
|
|
| JNIEnv* env = base::android::AttachCurrentThread();
|
|
|
| - for (auto it = results->begin(); it != results->end(); ++it) {
|
| -
|
| + for (const BrowsingHistoryService::HistoryEntry& entry : *results) {
|
| // TODO(twellington): move the domain logic to BrowsingHistoryServce so it
|
| // can be shared with BrowsingHistoryHandler.
|
| - base::string16 domain = url_formatter::IDNToUnicode(it->url.host());
|
| + base::string16 domain = url_formatter::IDNToUnicode(entry.url.host());
|
| // When the domain is empty, use the scheme instead. This allows for a
|
| // sensible treatment of e.g. file: URLs when group by domain is on.
|
| if (domain.empty())
|
| - domain = base::UTF8ToUTF16(it->url.scheme() + ":");
|
| + domain = base::UTF8ToUTF16(entry.url.scheme() + ":");
|
|
|
| - std::vector<int64_t> timestamps;
|
| - for (auto timestampIt = it->all_timestamps.begin();
|
| - timestampIt != it->all_timestamps.end(); ++timestampIt) {
|
| - timestamps.push_back(
|
| - base::Time::FromInternalValue(*timestampIt).ToJavaTime());
|
| - }
|
| + // This relies on |all_timestamps| being a sorted data structure.
|
| + int64_t most_recent_java_timestamp =
|
| + base::Time::FromInternalValue(*entry.all_timestamps.rbegin())
|
| + .ToJavaTime();
|
| + std::vector<int64_t> native_timestamps(entry.all_timestamps.begin(),
|
| + entry.all_timestamps.end());
|
|
|
| Java_BrowsingHistoryBridge_createHistoryItemAndAddToList(
|
| env, j_query_result_obj_.obj(),
|
| - base::android::ConvertUTF8ToJavaString(env, it->url.spec()),
|
| + base::android::ConvertUTF8ToJavaString(env, entry.url.spec()),
|
| base::android::ConvertUTF16ToJavaString(env, domain),
|
| - base::android::ConvertUTF16ToJavaString(env, it->title),
|
| - base::android::ToJavaLongArray(env, timestamps),
|
| - it->blocked_visit);
|
| -
|
| - timestamps.clear();
|
| + base::android::ConvertUTF16ToJavaString(env, entry.title),
|
| + most_recent_java_timestamp,
|
| + base::android::ToJavaLongArray(env, native_timestamps),
|
| + entry.blocked_visit);
|
| }
|
|
|
| Java_BrowsingHistoryBridge_onQueryHistoryComplete(
|
| @@ -100,21 +100,17 @@ void BrowsingHistoryBridge::MarkItemForRemoval(
|
| JNIEnv* env,
|
| const JavaParamRef<jobject>& obj,
|
| jstring j_url,
|
| - const JavaParamRef<jlongArray>& j_timestamps) {
|
| + const JavaParamRef<jlongArray>& j_native_timestamps) {
|
| std::unique_ptr<BrowsingHistoryService::HistoryEntry> entry(
|
| new BrowsingHistoryService::HistoryEntry());
|
| entry->url = GURL(base::android::ConvertJavaStringToUTF16(env, j_url));
|
|
|
| std::vector<int64_t> timestamps;
|
| - base::android::JavaLongArrayToInt64Vector(env, j_timestamps.obj(),
|
| + base::android::JavaLongArrayToInt64Vector(env, j_native_timestamps.obj(),
|
| ×tamps);
|
| - for (auto it = timestamps.begin(); it != timestamps.end(); ++it) {
|
| - base::Time visit_time = base::Time::FromJavaTime(*it);
|
| - entry->all_timestamps.insert(visit_time.ToInternalValue());
|
| - }
|
| + entry->all_timestamps.insert(timestamps.begin(), timestamps.end());
|
|
|
| items_to_remove_.push_back(std::move(entry));
|
| - timestamps.clear();
|
| }
|
|
|
| void BrowsingHistoryBridge::RemoveItems(JNIEnv* env,
|
|
|