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 |