Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/history/browsing_history_bridge.h" | 5 #include "chrome/browser/android/history/browsing_history_bridge.h" |
| 6 | 6 |
| 7 #include <jni.h> | 7 #include <jni.h> |
| 8 | 8 |
| 9 #include <utility> | |
| 10 | |
| 9 #include "base/android/jni_android.h" | 11 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_array.h" | 12 #include "base/android/jni_array.h" |
| 11 #include "base/android/jni_string.h" | 13 #include "base/android/jni_string.h" |
| 12 #include "base/macros.h" | 14 #include "base/macros.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 14 #include "base/time/time.h" | 16 #include "base/time/time.h" |
| 15 #include "chrome/browser/profiles/profile_android.h" | 17 #include "chrome/browser/profiles/profile_android.h" |
| 16 #include "components/url_formatter/url_formatter.h" | 18 #include "components/url_formatter/url_formatter.h" |
| 17 #include "jni/BrowsingHistoryBridge_jni.h" | 19 #include "jni/BrowsingHistoryBridge_jni.h" |
| 18 | 20 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 54 base::android::ConvertJavaStringToUTF16(env, j_query), options); | 56 base::android::ConvertJavaStringToUTF16(env, j_query), options); |
| 55 } | 57 } |
| 56 | 58 |
| 57 // BrowsingHistoryServiceHandler implementation | 59 // BrowsingHistoryServiceHandler implementation |
| 58 void BrowsingHistoryBridge::OnQueryComplete( | 60 void BrowsingHistoryBridge::OnQueryComplete( |
| 59 std::vector<BrowsingHistoryService::HistoryEntry>* results, | 61 std::vector<BrowsingHistoryService::HistoryEntry>* results, |
| 60 BrowsingHistoryService::QueryResultsInfo* query_results_info) { | 62 BrowsingHistoryService::QueryResultsInfo* query_results_info) { |
| 61 | 63 |
| 62 JNIEnv* env = base::android::AttachCurrentThread(); | 64 JNIEnv* env = base::android::AttachCurrentThread(); |
| 63 | 65 |
| 64 for (auto it = results->begin(); it != results->end(); ++it) { | 66 for (const BrowsingHistoryService::HistoryEntry& entry : *results) { |
| 65 | |
| 66 // TODO(twellington): move the domain logic to BrowsingHistoryServce so it | 67 // TODO(twellington): move the domain logic to BrowsingHistoryServce so it |
| 67 // can be shared with BrowsingHistoryHandler. | 68 // can be shared with BrowsingHistoryHandler. |
| 68 base::string16 domain = url_formatter::IDNToUnicode(it->url.host()); | 69 base::string16 domain = url_formatter::IDNToUnicode(entry.url.host()); |
| 69 // When the domain is empty, use the scheme instead. This allows for a | 70 // When the domain is empty, use the scheme instead. This allows for a |
| 70 // sensible treatment of e.g. file: URLs when group by domain is on. | 71 // sensible treatment of e.g. file: URLs when group by domain is on. |
| 71 if (domain.empty()) | 72 if (domain.empty()) |
| 72 domain = base::UTF8ToUTF16(it->url.scheme() + ":"); | 73 domain = base::UTF8ToUTF16(entry.url.scheme() + ":"); |
| 73 | 74 |
| 74 std::vector<int64_t> timestamps; | 75 std::vector<int64_t> java_timestamps; |
| 75 for (auto timestampIt = it->all_timestamps.begin(); | 76 std::vector<int64_t> native_timestamps; |
| 76 timestampIt != it->all_timestamps.end(); ++timestampIt) { | 77 for (int64_t timestamp : entry.all_timestamps) { |
| 77 timestamps.push_back( | 78 java_timestamps.push_back( |
| 78 base::Time::FromInternalValue(*timestampIt).ToJavaTime()); | 79 base::Time::FromInternalValue(timestamp).ToJavaTime()); |
| 80 native_timestamps.push_back(timestamp); | |
| 79 } | 81 } |
| 80 | 82 |
| 81 Java_BrowsingHistoryBridge_createHistoryItemAndAddToList( | 83 Java_BrowsingHistoryBridge_createHistoryItemAndAddToList( |
| 82 env, j_query_result_obj_.obj(), | 84 env, j_query_result_obj_.obj(), |
| 83 base::android::ConvertUTF8ToJavaString(env, it->url.spec()), | 85 base::android::ConvertUTF8ToJavaString(env, entry.url.spec()), |
| 84 base::android::ConvertUTF16ToJavaString(env, domain), | 86 base::android::ConvertUTF16ToJavaString(env, domain), |
| 85 base::android::ConvertUTF16ToJavaString(env, it->title), | 87 base::android::ConvertUTF16ToJavaString(env, entry.title), |
| 86 base::android::ToJavaLongArray(env, timestamps), | 88 base::android::ToJavaLongArray(env, java_timestamps), |
| 87 it->blocked_visit); | 89 base::android::ToJavaLongArray(env, native_timestamps), |
| 88 | 90 entry.blocked_visit); |
| 89 timestamps.clear(); | |
| 90 } | 91 } |
| 91 | 92 |
| 92 Java_BrowsingHistoryBridge_onQueryHistoryComplete( | 93 Java_BrowsingHistoryBridge_onQueryHistoryComplete( |
| 93 env, | 94 env, |
| 94 j_history_service_obj_.obj(), | 95 j_history_service_obj_.obj(), |
| 95 j_query_result_obj_.obj(), | 96 j_query_result_obj_.obj(), |
| 96 !(query_results_info->reached_beginning)); | 97 !(query_results_info->reached_beginning)); |
| 97 } | 98 } |
| 98 | 99 |
| 99 void BrowsingHistoryBridge::MarkItemForRemoval( | 100 void BrowsingHistoryBridge::MarkItemForRemoval( |
| 100 JNIEnv* env, | 101 JNIEnv* env, |
| 101 const JavaParamRef<jobject>& obj, | 102 const JavaParamRef<jobject>& obj, |
| 102 jstring j_url, | 103 jstring j_url, |
| 103 const JavaParamRef<jlongArray>& j_timestamps) { | 104 const JavaParamRef<jlongArray>& j_native_timestamps) { |
| 104 std::unique_ptr<BrowsingHistoryService::HistoryEntry> entry( | 105 std::unique_ptr<BrowsingHistoryService::HistoryEntry> entry( |
| 105 new BrowsingHistoryService::HistoryEntry()); | 106 new BrowsingHistoryService::HistoryEntry()); |
| 106 entry->url = GURL(base::android::ConvertJavaStringToUTF16(env, j_url)); | 107 entry->url = GURL(base::android::ConvertJavaStringToUTF16(env, j_url)); |
| 107 | 108 |
| 108 std::vector<int64_t> timestamps; | 109 std::vector<int64_t> timestamps; |
| 109 base::android::JavaLongArrayToInt64Vector(env, j_timestamps.obj(), | 110 base::android::JavaLongArrayToInt64Vector(env, j_native_timestamps.obj(), |
| 110 ×tamps); | 111 ×tamps); |
| 111 for (auto it = timestamps.begin(); it != timestamps.end(); ++it) { | 112 entry->all_timestamps.insert(timestamps.begin(), timestamps.end()); |
| 112 base::Time visit_time = base::Time::FromJavaTime(*it); | |
| 113 entry->all_timestamps.insert(visit_time.ToInternalValue()); | |
| 114 } | |
| 115 | 113 |
| 116 items_to_remove_.push_back(std::move(entry)); | 114 items_to_remove_.push_back(std::move(entry)); |
| 117 timestamps.clear(); | |
|
Theresa
2017/06/12 18:23:21
I had added this to make sure int64 timestamps in
skym
2017/06/12 19:45:13
Yeah, I don't think it was needed. The vector |tim
| |
| 118 } | 115 } |
| 119 | 116 |
| 120 void BrowsingHistoryBridge::RemoveItems(JNIEnv* env, | 117 void BrowsingHistoryBridge::RemoveItems(JNIEnv* env, |
| 121 const JavaParamRef<jobject>& obj) { | 118 const JavaParamRef<jobject>& obj) { |
| 122 browsing_history_service_->RemoveVisits(&items_to_remove_); | 119 browsing_history_service_->RemoveVisits(&items_to_remove_); |
| 123 items_to_remove_.clear(); | 120 items_to_remove_.clear(); |
| 124 } | 121 } |
| 125 | 122 |
| 126 void BrowsingHistoryBridge::OnRemoveVisitsComplete() { | 123 void BrowsingHistoryBridge::OnRemoveVisitsComplete() { |
| 127 JNIEnv* env = base::android::AttachCurrentThread(); | 124 JNIEnv* env = base::android::AttachCurrentThread(); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 151 return RegisterNativesImpl(env); | 148 return RegisterNativesImpl(env); |
| 152 } | 149 } |
| 153 | 150 |
| 154 static jlong Init(JNIEnv* env, | 151 static jlong Init(JNIEnv* env, |
| 155 const JavaParamRef<jobject>& obj, | 152 const JavaParamRef<jobject>& obj, |
| 156 const JavaParamRef<jobject>& j_profile) { | 153 const JavaParamRef<jobject>& j_profile) { |
| 157 BrowsingHistoryBridge* bridge = | 154 BrowsingHistoryBridge* bridge = |
| 158 new BrowsingHistoryBridge(env, obj, j_profile); | 155 new BrowsingHistoryBridge(env, obj, j_profile); |
| 159 return reinterpret_cast<intptr_t>(bridge); | 156 return reinterpret_cast<intptr_t>(bridge); |
| 160 } | 157 } |
| OLD | NEW |