Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: libadblockplus-android/jni/JniWebRequest.cpp

Issue 29678581: Issue 6000 - Rename "libadblockplus-android" (Closed)
Patch Set: Created Jan. 24, 2018, 6:53 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-present eyeo GmbH
4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation.
8 *
9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include "JniCallbacks.h"
19 #include "JniWebRequest.h"
20
21 // precached in JNI_OnLoad and released in JNI_OnUnload
22 JniGlobalReference<jclass>* headerEntryClass;
23 JniGlobalReference<jclass>* serverResponseClass;
24
25 void JniWebRequest_OnLoad(JavaVM* vm, JNIEnv* env, void* reserved)
26 {
27 headerEntryClass = new JniGlobalReference<jclass>(env, env->FindClass(PKG("Hea derEntry")));
28 serverResponseClass = new JniGlobalReference<jclass>(env, env->FindClass(PKG(" ServerResponse")));
29 }
30
31 void JniWebRequest_OnUnload(JavaVM* vm, JNIEnv* env, void* reserved)
32 {
33 if (headerEntryClass)
34 {
35 delete headerEntryClass;
36 headerEntryClass = NULL;
37 }
38
39 if (serverResponseClass)
40 {
41 delete serverResponseClass;
42 serverResponseClass = NULL;
43 }
44 }
45
46 JniWebRequest::JniWebRequest(JNIEnv* env, jobject callbackObject)
47 : JniCallbackBase(env, callbackObject)
48 {
49 }
50
51 AdblockPlus::ServerResponse JniWebRequest::GET(const std::string& url,
52 const AdblockPlus::HeaderList& requestHeaders) const
53 {
54 JNIEnvAcquire env(GetJavaVM());
55
56 jmethodID method = env->GetMethodID(
57 *JniLocalReference<jclass>(*env,
58 env->GetObjectClass(GetCallbackObject())),
59 "httpGET",
60 "(Ljava/lang/String;Ljava/util/List;)" TYP("ServerResponse"));
61
62 AdblockPlus::ServerResponse sResponse;
63 sResponse.status = AdblockPlus::IWebRequest::NS_ERROR_FAILURE;
64
65 if (method)
66 {
67 JniLocalReference<jobject> arrayList(*env, NewJniArrayList(*env));
68 jmethodID addMethod = JniGetAddToListMethod(*env, *arrayList);
69
70 for (AdblockPlus::HeaderList::const_iterator it = requestHeaders.begin(),
71 end = requestHeaders.end(); it != end; it++)
72 {
73 JniLocalReference<jobject> headerEntry(*env, NewTuple(*env, it->first, it- >second));
74 JniAddObjectToList(*env, *arrayList, addMethod, *headerEntry);
75 }
76
77 JniLocalReference<jobject> response(*env,
78 env->CallObjectMethod(GetCallbackObject(), method,
79 *JniLocalReference<jstring>(*env, env->NewStringUTF(url.c_str())),
80 *arrayList));
81
82 if (!env->ExceptionCheck())
83 {
84 sResponse.status = JniGetLongField(*env, serverResponseClass->Get(),
85 *response, "status");
86 sResponse.responseStatus = JniGetIntField(*env,
87 serverResponseClass->Get(),
88 *response,
89 "responseStatus");
90 sResponse.responseText = JniGetStringField(*env,
91 serverResponseClass->Get(),
92 *response,
93 "response");
94
95 // map headers
96 jobjectArray responseHeadersArray = JniGetStringArrayField(*env,
97 serverResponseC lass->Get(),
98 *response,
99 "headers");
100
101 if (responseHeadersArray)
102 {
103 int itemsCount = env->GetArrayLength(responseHeadersArray) / 2;
104 for (int i = 0; i < itemsCount; i++)
105 {
106 jstring jKey = (jstring)env->GetObjectArrayElement(responseHeadersArra y, i * 2);
107 std::string stdKey = JniJavaToStdString(*env, jKey);
108
109 jstring jValue = (jstring)env->GetObjectArrayElement(responseHeadersAr ray, i * 2 + 1);
110 std::string stdValue = JniJavaToStdString(*env, jValue);
111
112 std::pair<std::string,std::string> keyValue(stdKey, stdValue);
113 sResponse.responseHeaders.push_back(keyValue);
114 }
115 }
116 }
117 }
118
119 CheckAndLogJavaException(*env);
120
121 return sResponse;
122 }
123
124 jobject JniWebRequest::NewTuple(JNIEnv* env, const std::string& a,
125 const std::string& b) const
126 {
127 jmethodID factory = env->GetMethodID(headerEntryClass->Get(), "<init>",
128 "(Ljava/lang/String;Ljava/lang/String;)V");
129
130 JniLocalReference<jstring> strA(env, env->NewStringUTF(a.c_str()));
131 JniLocalReference<jstring> strB(env, env->NewStringUTF(b.c_str()));
132
133 return env->NewObject(headerEntryClass->Get(), factory, *strA, *strB);
134 }
OLDNEW

Powered by Google App Engine
This is Rietveld