Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: chrome/browser/android/history/browsing_history_bridge.cc

Issue 2935783002: Send microsecond resolution timestamps to Java history page so they can be sent back. (Closed)
Patch Set: Updates for twellington@ Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/android/history/browsing_history_bridge.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 // This relies on |all_timestamps| being a sorted data structure.
75 for (auto timestampIt = it->all_timestamps.begin(); 76 int64_t most_recent_java_timestamp =
76 timestampIt != it->all_timestamps.end(); ++timestampIt) { 77 base::Time::FromInternalValue(*entry.all_timestamps.rbegin())
77 timestamps.push_back( 78 .ToJavaTime();
78 base::Time::FromInternalValue(*timestampIt).ToJavaTime()); 79 std::vector<int64_t> native_timestamps(entry.all_timestamps.begin(),
79 } 80 entry.all_timestamps.end());
80 81
81 Java_BrowsingHistoryBridge_createHistoryItemAndAddToList( 82 Java_BrowsingHistoryBridge_createHistoryItemAndAddToList(
82 env, j_query_result_obj_.obj(), 83 env, j_query_result_obj_.obj(),
83 base::android::ConvertUTF8ToJavaString(env, it->url.spec()), 84 base::android::ConvertUTF8ToJavaString(env, entry.url.spec()),
84 base::android::ConvertUTF16ToJavaString(env, domain), 85 base::android::ConvertUTF16ToJavaString(env, domain),
85 base::android::ConvertUTF16ToJavaString(env, it->title), 86 base::android::ConvertUTF16ToJavaString(env, entry.title),
86 base::android::ToJavaLongArray(env, timestamps), 87 most_recent_java_timestamp,
87 it->blocked_visit); 88 base::android::ToJavaLongArray(env, native_timestamps),
88 89 entry.blocked_visit);
89 timestamps.clear();
90 } 90 }
91 91
92 Java_BrowsingHistoryBridge_onQueryHistoryComplete( 92 Java_BrowsingHistoryBridge_onQueryHistoryComplete(
93 env, 93 env,
94 j_history_service_obj_.obj(), 94 j_history_service_obj_.obj(),
95 j_query_result_obj_.obj(), 95 j_query_result_obj_.obj(),
96 !(query_results_info->reached_beginning)); 96 !(query_results_info->reached_beginning));
97 } 97 }
98 98
99 void BrowsingHistoryBridge::MarkItemForRemoval( 99 void BrowsingHistoryBridge::MarkItemForRemoval(
100 JNIEnv* env, 100 JNIEnv* env,
101 const JavaParamRef<jobject>& obj, 101 const JavaParamRef<jobject>& obj,
102 jstring j_url, 102 jstring j_url,
103 const JavaParamRef<jlongArray>& j_timestamps) { 103 const JavaParamRef<jlongArray>& j_native_timestamps) {
104 std::unique_ptr<BrowsingHistoryService::HistoryEntry> entry( 104 std::unique_ptr<BrowsingHistoryService::HistoryEntry> entry(
105 new BrowsingHistoryService::HistoryEntry()); 105 new BrowsingHistoryService::HistoryEntry());
106 entry->url = GURL(base::android::ConvertJavaStringToUTF16(env, j_url)); 106 entry->url = GURL(base::android::ConvertJavaStringToUTF16(env, j_url));
107 107
108 std::vector<int64_t> timestamps; 108 std::vector<int64_t> timestamps;
109 base::android::JavaLongArrayToInt64Vector(env, j_timestamps.obj(), 109 base::android::JavaLongArrayToInt64Vector(env, j_native_timestamps.obj(),
110 &timestamps); 110 &timestamps);
111 for (auto it = timestamps.begin(); it != timestamps.end(); ++it) { 111 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 112
116 items_to_remove_.push_back(std::move(entry)); 113 items_to_remove_.push_back(std::move(entry));
117 timestamps.clear();
118 } 114 }
119 115
120 void BrowsingHistoryBridge::RemoveItems(JNIEnv* env, 116 void BrowsingHistoryBridge::RemoveItems(JNIEnv* env,
121 const JavaParamRef<jobject>& obj) { 117 const JavaParamRef<jobject>& obj) {
122 browsing_history_service_->RemoveVisits(&items_to_remove_); 118 browsing_history_service_->RemoveVisits(&items_to_remove_);
123 items_to_remove_.clear(); 119 items_to_remove_.clear();
124 } 120 }
125 121
126 void BrowsingHistoryBridge::OnRemoveVisitsComplete() { 122 void BrowsingHistoryBridge::OnRemoveVisitsComplete() {
127 JNIEnv* env = base::android::AttachCurrentThread(); 123 JNIEnv* env = base::android::AttachCurrentThread();
(...skipping 23 matching lines...) Expand all
151 return RegisterNativesImpl(env); 147 return RegisterNativesImpl(env);
152 } 148 }
153 149
154 static jlong Init(JNIEnv* env, 150 static jlong Init(JNIEnv* env,
155 const JavaParamRef<jobject>& obj, 151 const JavaParamRef<jobject>& obj,
156 const JavaParamRef<jobject>& j_profile) { 152 const JavaParamRef<jobject>& j_profile) {
157 BrowsingHistoryBridge* bridge = 153 BrowsingHistoryBridge* bridge =
158 new BrowsingHistoryBridge(env, obj, j_profile); 154 new BrowsingHistoryBridge(env, obj, j_profile);
159 return reinterpret_cast<intptr_t>(bridge); 155 return reinterpret_cast<intptr_t>(bridge);
160 } 156 }
OLDNEW
« no previous file with comments | « chrome/browser/android/history/browsing_history_bridge.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698