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

Side by Side Diff: components/cronet/android/test/sdch_test_util.cc

Issue 1133883002: [Cronet] Enable persistence mode for Sdch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quic_server_remove_loop
Patch Set: Removed globals Created 5 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "sdch_test_util.h"
6
7 #include <string>
8
9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h"
12 #include "base/bind.h"
13 #include "base/macros.h"
14 #include "components/cronet/android/cronet_url_request_context_adapter.h"
15 #include "components/cronet/android/url_request_context_adapter.h"
16 #include "jni/SdchObserver_jni.h"
17 #include "net/base/sdch_manager.h"
18 #include "net/base/sdch_observer.h"
19 #include "net/url_request/url_request_context.h"
20 #include "url/gurl.h"
21
22 namespace cronet {
23
24 namespace {
25
26 class TestSdchObserver : public net::SdchObserver {
27 public:
28 TestSdchObserver(
29 net::SdchManager* manager,
30 const base::android::ScopedJavaGlobalRef<jobject>& jsdch_observer_ref)
31 : manager_(manager) {
32 jsdch_observer_ref_.Reset(jsdch_observer_ref);
33 }
34
35 // SdchObserver implementation
36 void OnDictionaryAdded(const GURL& dictionary_url,
37 const std::string& server_hash) override {
38 JNIEnv* env = base::android::AttachCurrentThread();
39 Java_SdchObserver_onDictionaryAdded(env, jsdch_observer_ref_.obj(),
40 base::android::ConvertUTF8ToJavaString(
41 env, dictionary_url.spec()).obj());
42 manager_->RemoveObserver(this);
43 delete this;
44 }
45
46 void OnDictionaryRemoved(const std::string& server_hash) override {}
47
48 void OnDictionaryUsed(const std::string& server_hash) override {}
49
50 void OnGetDictionary(const GURL& request_url,
51 const GURL& dictionary_url) override {}
52
53 void OnClearDictionaries() override {}
54
55 private:
56 net::SdchManager* manager_;
57 base::android::ScopedJavaGlobalRef<jobject> jsdch_observer_ref_;
58
59 DISALLOW_COPY_AND_ASSIGN(TestSdchObserver);
60 };
61
62 void AddSdchObserverHelper(
63 const GURL& target_url,
64 const base::android::ScopedJavaGlobalRef<jobject>& jsdch_observer_ref,
65 net::URLRequestContext* url_request_context) {
66 JNIEnv* env = base::android::AttachCurrentThread();
67 // If dictionaries for |target_url| are already added, skip adding the
68 // observer.
69 if (url_request_context->sdch_manager()->GetDictionarySet(target_url)) {
mmenke 2015/05/27 20:56:05 Seems weird to only check target URL here, and not
xunjieli 2015/05/27 21:39:42 You are right. That will make the interface more c
70 Java_SdchObserver_onDictionarySetAlreadyPresent(env,
71 jsdch_observer_ref.obj());
72 return;
73 }
74
75 url_request_context->sdch_manager()->AddObserver(new TestSdchObserver(
76 url_request_context->sdch_manager(), jsdch_observer_ref));
77 Java_SdchObserver_onAddSdchObserverCompleted(env, jsdch_observer_ref.obj());
78 }
79
80 void AddSdchObserverOnNetworkThread(
81 const GURL& target_url,
82 const base::android::ScopedJavaGlobalRef<jobject>& jsdch_observer_ref,
83 CronetURLRequestContextAdapter* context_adapter) {
84 AddSdchObserverHelper(target_url, jsdch_observer_ref,
85 context_adapter->GetURLRequestContext());
86 }
87
88 // TODO(xunjieli): Delete this once legacy API is removed.
89 void AddSdchObserverOnNetworkThreadLegacyAPI(
90 const GURL& target_url,
91 const base::android::ScopedJavaGlobalRef<jobject>& jsdch_observer_ref,
92 URLRequestContextAdapter* context_adapter) {
93 AddSdchObserverHelper(target_url, jsdch_observer_ref,
94 context_adapter->GetURLRequestContext());
95 }
96
97 } // namespace
98
99 void AddSdchObserver(JNIEnv* env,
100 jobject jsdch_observer,
101 jstring jtarget_url,
102 jlong jadapter) {
103 base::android::ScopedJavaGlobalRef<jobject> jsdch_observer_ref;
104 // ScopedJavaGlobalRef do not hold onto the env reference, so it is safe to
105 // use it across threads. |AddSdchObserverHelper| will acquire a new
106 // JNIEnv before calling into Java.
107 jsdch_observer_ref.Reset(env, jsdch_observer);
108
109 GURL target_url(base::android::ConvertJavaStringToUTF8(env, jtarget_url));
110 CronetURLRequestContextAdapter* context_adapter =
111 reinterpret_cast<CronetURLRequestContextAdapter*>(jadapter);
112 context_adapter->PostTaskToNetworkThread(
113 FROM_HERE,
114 base::Bind(&AddSdchObserverOnNetworkThread, target_url,
115 jsdch_observer_ref, base::Unretained(context_adapter)));
116 }
117
118 void AddSdchObserverLegacyAPI(JNIEnv* env,
119 jobject jsdch_observer,
120 jstring jtarget_url,
121 jlong jadapter) {
122 base::android::ScopedJavaGlobalRef<jobject> jsdch_observer_ref;
123 // ScopedJavaGlobalRef do not hold onto the env reference, so it is safe to
124 // use it across threads. |AddSdchObserverHelper| will acquire a new
125 // JNIEnv before calling into Java.
126 jsdch_observer_ref.Reset(env, jsdch_observer);
127 GURL target_url(base::android::ConvertJavaStringToUTF8(env, jtarget_url));
128 URLRequestContextAdapter* context_adapter =
129 reinterpret_cast<URLRequestContextAdapter*>(jadapter);
130 context_adapter->PostTaskToNetworkThread(
131 FROM_HERE,
132 base::Bind(&AddSdchObserverOnNetworkThreadLegacyAPI, target_url,
133 jsdch_observer_ref, base::Unretained(context_adapter)));
134 }
135
136 bool RegisterSdchTestUtil(JNIEnv* env) {
137 return RegisterNativesImpl(env);
138 }
139
140 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698