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

Side by Side Diff: chrome/browser/android/physical_web/physical_web_data_source_android.cc

Issue 2561493002: Pass Physical Web metadata through a struct (Closed)
Patch Set: Forward declare MetadataList Created 3 years, 11 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
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/physical_web/physical_web_data_source_android.h " 5 #include "chrome/browser/android/physical_web/physical_web_data_source_android.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_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "jni/UrlManager_jni.h" 14 #include "jni/UrlManager_jni.h"
15 15
16 using base::android::AttachCurrentThread; 16 using base::android::AttachCurrentThread;
17 using base::android::ConvertJavaStringToUTF8; 17 using base::android::ConvertJavaStringToUTF8;
18 using base::android::JavaParamRef; 18 using base::android::JavaParamRef;
19 using base::android::ScopedJavaLocalRef; 19 using base::android::ScopedJavaLocalRef;
20 20
21 PhysicalWebCollection::PhysicalWebCollection() 21 PhysicalWebCollection::PhysicalWebCollection()
22 : metadata_list_(base::MakeUnique<base::ListValue>()), 22 : dictionary_value_list_(base::MakeUnique<base::ListValue>()),
23 metadata_list_(base::MakeUnique<physical_web::MetadataList>()),
23 accessed_once_(false) {} 24 accessed_once_(false) {}
24 25
25 PhysicalWebCollection::~PhysicalWebCollection() {} 26 PhysicalWebCollection::~PhysicalWebCollection() {}
26 27
27 void PhysicalWebCollection::AppendMetadataItem( 28 void PhysicalWebCollection::AppendMetadataItem(
28 JNIEnv* env, 29 JNIEnv* env,
29 const JavaParamRef<jobject>& obj, 30 const JavaParamRef<jobject>& obj,
30 const JavaParamRef<jstring>& j_request_url, 31 const JavaParamRef<jstring>& j_request_url,
31 jdouble distance_estimate, 32 jdouble distance_estimate,
32 jint scan_timestamp, 33 jlong scan_timestamp,
33 const JavaParamRef<jstring>& j_site_url, 34 const JavaParamRef<jstring>& j_site_url,
34 const JavaParamRef<jstring>& j_icon_url, 35 const JavaParamRef<jstring>& j_icon_url,
35 const JavaParamRef<jstring>& j_title, 36 const JavaParamRef<jstring>& j_title,
36 const JavaParamRef<jstring>& j_description, 37 const JavaParamRef<jstring>& j_description,
37 const JavaParamRef<jstring>& j_group_id) { 38 const JavaParamRef<jstring>& j_group_id) {
38 auto metadata_item = new base::DictionaryValue(); 39 // Create a DictionaryValue. Notice that we no longer set the timestamp
39 metadata_item->SetString(physical_web::kScannedUrlKey, 40 // since it is a long and the DictionaryValue can only store ints.
41 auto dictionary_value = base::MakeUnique<base::DictionaryValue>();
42 dictionary_value->SetString(physical_web::kScannedUrlKey,
40 ConvertJavaStringToUTF8(j_request_url)); 43 ConvertJavaStringToUTF8(j_request_url));
41 metadata_item->SetDouble(physical_web::kDistanceEstimateKey, 44 dictionary_value->SetDouble(physical_web::kDistanceEstimateKey,
42 distance_estimate); 45 distance_estimate);
43 metadata_item->SetInteger(physical_web::kScanTimestampKey, scan_timestamp); 46 dictionary_value->SetString(physical_web::kResolvedUrlKey,
44 metadata_item->SetString(physical_web::kResolvedUrlKey,
45 ConvertJavaStringToUTF8(j_site_url)); 47 ConvertJavaStringToUTF8(j_site_url));
46 metadata_item->SetString(physical_web::kIconUrlKey, 48 dictionary_value->SetString(physical_web::kIconUrlKey,
47 ConvertJavaStringToUTF8(j_icon_url)); 49 ConvertJavaStringToUTF8(j_icon_url));
48 metadata_item->SetString(physical_web::kTitleKey, 50 dictionary_value->SetString(physical_web::kTitleKey,
49 ConvertJavaStringToUTF8(j_title)); 51 ConvertJavaStringToUTF8(j_title));
50 metadata_item->SetString(physical_web::kDescriptionKey, 52 dictionary_value->SetString(physical_web::kDescriptionKey,
51 ConvertJavaStringToUTF8(j_description)); 53 ConvertJavaStringToUTF8(j_description));
52 metadata_item->SetString(physical_web::kGroupIdKey, 54 dictionary_value->SetString(physical_web::kGroupIdKey,
53 ConvertJavaStringToUTF8(j_group_id)); 55 ConvertJavaStringToUTF8(j_group_id));
54 metadata_list_->Append(std::move(metadata_item)); 56 dictionary_value_list_->Append(std::move(dictionary_value));
57
58 physical_web::Metadata metadata;
59 metadata.scanned_url = GURL(ConvertJavaStringToUTF8(j_request_url));
60 metadata.resolved_url = GURL(ConvertJavaStringToUTF8(j_site_url));
61 metadata.icon_url = GURL(ConvertJavaStringToUTF8(j_icon_url));
62 metadata.title = ConvertJavaStringToUTF8(j_title);
63 metadata.description = ConvertJavaStringToUTF8(j_description);
64 metadata.group_id = ConvertJavaStringToUTF8(j_group_id);
65 metadata.distance_estimate = distance_estimate;
66 metadata.scan_timestamp = base::Time::FromJavaTime(scan_timestamp);
67 metadata_list_->push_back(std::move(metadata));
55 } 68 }
56 69
57 std::unique_ptr<base::ListValue> PhysicalWebCollection::GetMetadataList() { 70 std::unique_ptr<physical_web::MetadataList>
71 PhysicalWebCollection::GetMetadataList() {
58 DCHECK(!accessed_once_); 72 DCHECK(!accessed_once_);
59 accessed_once_ = true; 73 accessed_once_ = true;
60 return std::move(metadata_list_); 74 return std::move(metadata_list_);
61 } 75 }
62 76
77 std::unique_ptr<base::ListValue> PhysicalWebCollection::GetMetadata() {
78 DCHECK(!accessed_once_);
79 accessed_once_ = true;
80 return std::move(dictionary_value_list_);
81 }
82
63 PhysicalWebDataSourceAndroid::PhysicalWebDataSourceAndroid() { 83 PhysicalWebDataSourceAndroid::PhysicalWebDataSourceAndroid() {
64 Initialize(); 84 Initialize();
65 } 85 }
66 86
67 PhysicalWebDataSourceAndroid::~PhysicalWebDataSourceAndroid() {} 87 PhysicalWebDataSourceAndroid::~PhysicalWebDataSourceAndroid() {}
68 88
69 void PhysicalWebDataSourceAndroid::Initialize() { 89 void PhysicalWebDataSourceAndroid::Initialize() {
70 JNIEnv* env = AttachCurrentThread(); 90 JNIEnv* env = AttachCurrentThread();
71 91
72 // Cache a reference to the singleton instance of UrlManager. 92 // Cache a reference to the singleton instance of UrlManager.
73 url_manager_.Reset(Java_UrlManager_getInstance(env)); 93 url_manager_.Reset(Java_UrlManager_getInstance(env));
74 DCHECK(url_manager_.obj()); 94 DCHECK(url_manager_.obj());
75 } 95 }
76 96
77 void PhysicalWebDataSourceAndroid::StartDiscovery( 97 void PhysicalWebDataSourceAndroid::StartDiscovery(
78 bool network_request_enabled) { 98 bool network_request_enabled) {
79 // On Android, scanning is started and stopped through the Java layer. 99 // On Android, scanning is started and stopped through the Java layer.
80 NOTREACHED(); 100 NOTREACHED();
81 } 101 }
82 102
83 void PhysicalWebDataSourceAndroid::StopDiscovery() { 103 void PhysicalWebDataSourceAndroid::StopDiscovery() {
84 // On Android, scanning is started and stopped through the Java layer. 104 // On Android, scanning is started and stopped through the Java layer.
85 NOTREACHED(); 105 NOTREACHED();
86 } 106 }
87 107
88 std::unique_ptr<base::ListValue> PhysicalWebDataSourceAndroid::GetMetadata() { 108 std::unique_ptr<physical_web::MetadataList>
109 PhysicalWebDataSourceAndroid::GetMetadataList() {
89 JNIEnv* env = AttachCurrentThread(); 110 JNIEnv* env = AttachCurrentThread();
90 111
91 auto pw_collection = base::MakeUnique<PhysicalWebCollection>(); 112 auto pw_collection = base::MakeUnique<PhysicalWebCollection>();
92 Java_UrlManager_getPwCollection(env, url_manager_.obj(), 113 Java_UrlManager_getPwCollection(env, url_manager_.obj(),
93 (long)pw_collection.get()); 114 reinterpret_cast<long>(pw_collection.get()));
94 115
95 return pw_collection->GetMetadataList(); 116 return pw_collection->GetMetadataList();
96 } 117 }
97 118
119 std::unique_ptr<base::ListValue>
120 PhysicalWebDataSourceAndroid::GetMetadata() {
121 JNIEnv* env = AttachCurrentThread();
122
123 auto pw_collection = base::MakeUnique<PhysicalWebCollection>();
124 Java_UrlManager_getPwCollection(env, url_manager_.obj(),
125 reinterpret_cast<long>(pw_collection.get()));
126
127 return pw_collection->GetMetadata();
128 }
129
98 bool PhysicalWebDataSourceAndroid::HasUnresolvedDiscoveries() { 130 bool PhysicalWebDataSourceAndroid::HasUnresolvedDiscoveries() {
99 NOTIMPLEMENTED(); 131 NOTIMPLEMENTED();
100 return false; 132 return false;
101 } 133 }
102 134
103 void PhysicalWebDataSourceAndroid::OnFound( 135 void PhysicalWebDataSourceAndroid::OnFound(
104 JNIEnv* env, 136 JNIEnv* env,
105 const base::android::JavaParamRef<jobject>& obj, 137 const base::android::JavaParamRef<jobject>& obj,
106 const base::android::JavaParamRef<jstring>& j_url) { 138 const base::android::JavaParamRef<jstring>& j_url) {
107 NotifyOnFound(GURL(ConvertJavaStringToUTF8(env, j_url))); 139 NotifyOnFound(GURL(ConvertJavaStringToUTF8(env, j_url)));
(...skipping 18 matching lines...) Expand all
126 // static 158 // static
127 bool PhysicalWebDataSourceAndroid::RegisterPhysicalWebDataSource(JNIEnv* env) { 159 bool PhysicalWebDataSourceAndroid::RegisterPhysicalWebDataSource(JNIEnv* env) {
128 return RegisterNativesImpl(env); 160 return RegisterNativesImpl(env);
129 } 161 }
130 162
131 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 163 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
132 physical_web::PhysicalWebDataSource* data_source = 164 physical_web::PhysicalWebDataSource* data_source =
133 g_browser_process->GetPhysicalWebDataSource(); 165 g_browser_process->GetPhysicalWebDataSource();
134 return reinterpret_cast<intptr_t>(data_source); 166 return reinterpret_cast<intptr_t>(data_source);
135 } 167 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698