| 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 "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_array.h" |
| 10 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 13 #include "base/time/time.h" | 14 #include "base/time/time.h" |
| 14 #include "chrome/browser/profiles/profile_android.h" | 15 #include "chrome/browser/profiles/profile_android.h" |
| 15 #include "components/url_formatter/url_formatter.h" | 16 #include "components/url_formatter/url_formatter.h" |
| 16 #include "jni/BrowsingHistoryBridge_jni.h" | 17 #include "jni/BrowsingHistoryBridge_jni.h" |
| 17 | 18 |
| 18 const int kMaxQueryCount = 100; | 19 const int kMaxQueryCount = 100; |
| 19 | 20 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 for (auto it = results->begin(); it != results->end(); ++it) { | 60 for (auto it = results->begin(); it != results->end(); ++it) { |
| 60 | 61 |
| 61 // TODO(twellington): move the domain logic to BrowsingHistoryServce so it | 62 // TODO(twellington): move the domain logic to BrowsingHistoryServce so it |
| 62 // can be shared with BrowsingHistoryHandler. | 63 // can be shared with BrowsingHistoryHandler. |
| 63 base::string16 domain = url_formatter::IDNToUnicode(it->url.host()); | 64 base::string16 domain = url_formatter::IDNToUnicode(it->url.host()); |
| 64 // When the domain is empty, use the scheme instead. This allows for a | 65 // When the domain is empty, use the scheme instead. This allows for a |
| 65 // sensible treatment of e.g. file: URLs when group by domain is on. | 66 // sensible treatment of e.g. file: URLs when group by domain is on. |
| 66 if (domain.empty()) | 67 if (domain.empty()) |
| 67 domain = base::UTF8ToUTF16(it->url.scheme() + ":"); | 68 domain = base::UTF8ToUTF16(it->url.scheme() + ":"); |
| 68 | 69 |
| 70 std::vector<int64_t> timestamps; |
| 71 for (auto timestampIt = it->all_timestamps.begin(); |
| 72 timestampIt != it->all_timestamps.end(); ++timestampIt) { |
| 73 timestamps.push_back( |
| 74 base::Time::FromInternalValue(*timestampIt).ToJavaTime()); |
| 75 } |
| 76 |
| 69 Java_BrowsingHistoryBridge_createHistoryItemAndAddToList( | 77 Java_BrowsingHistoryBridge_createHistoryItemAndAddToList( |
| 70 env, | 78 env, j_query_result_obj_.obj(), |
| 71 j_query_result_obj_.obj(), | |
| 72 base::android::ConvertUTF8ToJavaString(env, it->url.spec()), | 79 base::android::ConvertUTF8ToJavaString(env, it->url.spec()), |
| 73 base::android::ConvertUTF16ToJavaString(env, domain), | 80 base::android::ConvertUTF16ToJavaString(env, domain), |
| 74 base::android::ConvertUTF16ToJavaString(env, it->title), | 81 base::android::ConvertUTF16ToJavaString(env, it->title), |
| 75 it->time.ToJavaTime()); | 82 base::android::ToJavaLongArray(env, timestamps)); |
| 83 |
| 84 timestamps.clear(); |
| 76 } | 85 } |
| 77 | 86 |
| 78 Java_BrowsingHistoryBridge_onQueryHistoryComplete( | 87 Java_BrowsingHistoryBridge_onQueryHistoryComplete( |
| 79 env, | 88 env, |
| 80 j_history_service_obj_.obj(), | 89 j_history_service_obj_.obj(), |
| 81 j_query_result_obj_.obj()); | 90 j_query_result_obj_.obj()); |
| 82 | 91 |
| 83 j_query_result_obj_.Release(); | 92 j_query_result_obj_.Release(); |
| 84 } | 93 } |
| 85 | 94 |
| 95 void BrowsingHistoryBridge::MarkItemForRemoval( |
| 96 JNIEnv* env, |
| 97 const JavaParamRef<jobject>& obj, |
| 98 jstring j_url, |
| 99 const JavaParamRef<jlongArray>& j_timestamps) { |
| 100 std::unique_ptr<BrowsingHistoryService::HistoryEntry> entry( |
| 101 new BrowsingHistoryService::HistoryEntry()); |
| 102 entry->url = GURL(base::android::ConvertJavaStringToUTF16(env, j_url)); |
| 103 |
| 104 std::vector<int64_t> timestamps; |
| 105 base::android::JavaLongArrayToInt64Vector(env, j_timestamps.obj(), |
| 106 ×tamps); |
| 107 for (auto it = timestamps.begin(); it != timestamps.end(); ++it) { |
| 108 base::Time visit_time = base::Time::FromJavaTime(*it); |
| 109 entry->all_timestamps.insert(visit_time.ToInternalValue()); |
| 110 } |
| 111 |
| 112 items_to_remove_.push_back(std::move(entry)); |
| 113 timestamps.clear(); |
| 114 } |
| 115 |
| 116 void BrowsingHistoryBridge::RemoveItems(JNIEnv* env, |
| 117 const JavaParamRef<jobject>& obj) { |
| 118 browsing_history_service_->RemoveVisits(&items_to_remove_); |
| 119 items_to_remove_.clear(); |
| 120 } |
| 121 |
| 86 void BrowsingHistoryBridge::OnRemoveVisitsComplete() { | 122 void BrowsingHistoryBridge::OnRemoveVisitsComplete() { |
| 87 // TODO(twellington): implement | 123 JNIEnv* env = base::android::AttachCurrentThread(); |
| 124 Java_BrowsingHistoryBridge_onRemoveComplete(env, |
| 125 j_history_service_obj_.obj()); |
| 88 } | 126 } |
| 89 | 127 |
| 90 void BrowsingHistoryBridge::OnRemoveVisitsFailed() { | 128 void BrowsingHistoryBridge::OnRemoveVisitsFailed() { |
| 91 // TODO(twellington): implement | 129 JNIEnv* env = base::android::AttachCurrentThread(); |
| 130 Java_BrowsingHistoryBridge_onRemoveFailed(env, j_history_service_obj_.obj()); |
| 92 } | 131 } |
| 93 | 132 |
| 94 void BrowsingHistoryBridge::HistoryDeleted() { | 133 void BrowsingHistoryBridge::HistoryDeleted() { |
| 95 // TODO(twellington): implement | 134 JNIEnv* env = base::android::AttachCurrentThread(); |
| 135 Java_BrowsingHistoryBridge_onHistoryDeleted(env, |
| 136 j_history_service_obj_.obj()); |
| 96 } | 137 } |
| 97 | 138 |
| 98 void BrowsingHistoryBridge::HasOtherFormsOfBrowsingHistory( | 139 void BrowsingHistoryBridge::HasOtherFormsOfBrowsingHistory( |
| 99 bool has_other_forms, bool has_synced_results) { | 140 bool has_other_forms, bool has_synced_results) { |
| 100 // TODO(twellington): implement | 141 // TODO(twellington): implement |
| 101 } | 142 } |
| 102 | 143 |
| 103 bool RegisterBrowsingHistoryBridge(JNIEnv* env) { | 144 bool RegisterBrowsingHistoryBridge(JNIEnv* env) { |
| 104 return RegisterNativesImpl(env); | 145 return RegisterNativesImpl(env); |
| 105 } | 146 } |
| 106 | 147 |
| 107 static jlong Init(JNIEnv* env, | 148 static jlong Init(JNIEnv* env, |
| 108 const JavaParamRef<jobject>& obj, | 149 const JavaParamRef<jobject>& obj, |
| 109 const JavaParamRef<jobject>& j_profile) { | 150 const JavaParamRef<jobject>& j_profile) { |
| 110 BrowsingHistoryBridge* bridge = | 151 BrowsingHistoryBridge* bridge = |
| 111 new BrowsingHistoryBridge(env, obj, j_profile); | 152 new BrowsingHistoryBridge(env, obj, j_profile); |
| 112 return reinterpret_cast<intptr_t>(bridge); | 153 return reinterpret_cast<intptr_t>(bridge); |
| 113 } | 154 } |
| OLD | NEW |