Skip to content

Commit c452b29

Browse files
author
Sefa Ilkimen
committed
WIP commit for iOS:
- failure handler gets called if an exception occurs in native code - rename "raw" serializer to "utf8" - extract serializer into separate file
1 parent 60e7deb commit c452b29

File tree

9 files changed

+301
-246
lines changed

9 files changed

+301
-246
lines changed

plugin.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
</config-file>
2525
<header-file src="src/ios/CordovaHttpPlugin.h"/>
2626
<header-file src="src/ios/TextResponseSerializer.h"/>
27+
<header-file src="src/ios/TextRequestSerializer.h"/>
2728
<header-file src="src/ios/AFNetworking/AFHTTPSessionManager.h"/>
2829
<header-file src="src/ios/AFNetworking/AFNetworking.h"/>
2930
<header-file src="src/ios/AFNetworking/AFNetworkReachabilityManager.h"/>
@@ -33,6 +34,7 @@
3334
<header-file src="src/ios/AFNetworking/AFURLSessionManager.h"/>
3435
<source-file src="src/ios/CordovaHttpPlugin.m"/>
3536
<source-file src="src/ios/TextResponseSerializer.m"/>
37+
<source-file src="src/ios/TextRequestSerializer.m"/>
3638
<source-file src="src/ios/AFNetworking/AFHTTPSessionManager.m"/>
3739
<source-file src="src/ios/AFNetworking/AFNetworkReachabilityManager.m"/>
3840
<source-file src="src/ios/AFNetworking/AFSecurityPolicy.m"/>
@@ -64,4 +66,4 @@
6466
<source-file src="src/android/com/synconset/cordovahttp/CordovaHttpPatch.java" target-dir="src/com/synconset/cordovahttp"/>
6567
<source-file src="src/android/com/synconset/cordovahttp/CordovaHttpUpload.java" target-dir="src/com/synconset/cordovahttp"/>
6668
</platform>
67-
</plugin>
69+
</plugin>

src/android/com/synconset/cordovahttp/CordovaHttp.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ protected HttpRequest setupDataSerializer(HttpRequest request) throws JSONExcept
144144
if (new String("json").equals(this.getSerializerName())) {
145145
request.contentType(request.CONTENT_TYPE_JSON, request.CHARSET_UTF8);
146146
request.send(this.getParamsObject().toString());
147-
} else if (new String("raw").equals(this.getSerializerName())) {
148-
// request.contentType(request.CONTENT_TYPE_JSON, request.CHARSET_UTF8);
147+
} else if (new String("utf8").equals(this.getSerializerName())) {
149148
request.send(this.getParamsObject().toString());
150149
} else
151150
{

src/ios/AFNetworking/AFURLRequestSerialization.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -375,19 +375,6 @@ forHTTPHeaderField:(NSString *)field;
375375

376376
@end
377377

378-
379-
#pragma mark -
380-
381-
/**
382-
`AFRAWRequestSerializer` is a subclass of `AFHTTPRequestSerializer`
383-
*/
384-
@interface AFRAWRequestSerializer : AFHTTPRequestSerializer
385-
386-
387-
+ (instancetype)serializer;
388-
389-
@end
390-
391378
#pragma mark -
392379

393380
/**

src/ios/AFNetworking/AFURLRequestSerialization.m

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,62 +1195,6 @@ - (instancetype)copyWithZone:(NSZone *)zone {
11951195

11961196
@end
11971197

1198-
1199-
#pragma mark -
1200-
1201-
@implementation AFRAWRequestSerializer
1202-
1203-
+ (instancetype)serializer
1204-
{
1205-
AFRAWRequestSerializer *serializer = [[self alloc] init];
1206-
return serializer;
1207-
}
1208-
1209-
#pragma mark - AFURLRequestSerialization
1210-
1211-
- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
1212-
withParameters:(id)parameters
1213-
error:(NSError *__autoreleasing *)error
1214-
{
1215-
NSParameterAssert(request);
1216-
1217-
if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {
1218-
return [super requestBySerializingRequest:request withParameters:parameters error:error];
1219-
}
1220-
1221-
NSMutableURLRequest *mutableRequest = [request mutableCopy];
1222-
1223-
[self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
1224-
if (![request valueForHTTPHeaderField:field]) {
1225-
[mutableRequest setValue:value forHTTPHeaderField:field];
1226-
}
1227-
}];
1228-
1229-
if (parameters) {
1230-
// if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) {
1231-
// [mutableRequest setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"];
1232-
// }
1233-
1234-
[mutableRequest setHTTPBody: [parameters dataUsingEncoding:NSUTF8StringEncoding]];
1235-
}
1236-
1237-
return mutableRequest;
1238-
}
1239-
1240-
#pragma mark - NSSecureCoding
1241-
1242-
- (instancetype)initWithCoder:(NSCoder *)decoder {
1243-
self = [super initWithCoder:decoder];
1244-
if (!self) {
1245-
return nil;
1246-
}
1247-
1248-
return self;
1249-
}
1250-
1251-
@end
1252-
1253-
12541198
#pragma mark -
12551199

12561200
@implementation AFJSONRequestSerializer

src/ios/CordovaHttpPlugin.m

Lines changed: 222 additions & 167 deletions
Large diffs are not rendered by default.

src/ios/TextRequestSerializer.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#import <Foundation/Foundation.h>
2+
#import "AFURLRequestSerialization.h"
3+
4+
@interface TextRequestSerializer : AFHTTPRequestSerializer
5+
6+
+ (instancetype)serializer;
7+
8+
@end

src/ios/TextRequestSerializer.m

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#import "TextRequestSerializer.h"
2+
3+
@implementation TextRequestSerializer
4+
5+
+ (instancetype)serializer
6+
{
7+
TextRequestSerializer *serializer = [[self alloc] init];
8+
return serializer;
9+
}
10+
11+
#pragma mark - AFURLRequestSerialization
12+
13+
- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
14+
withParameters:(id)parameters
15+
error:(NSError *__autoreleasing *)error
16+
{
17+
NSParameterAssert(request);
18+
19+
if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) {
20+
return [super requestBySerializingRequest:request withParameters:parameters error:error];
21+
}
22+
23+
NSMutableURLRequest *mutableRequest = [request mutableCopy];
24+
25+
[self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) {
26+
if (![request valueForHTTPHeaderField:field]) {
27+
[mutableRequest setValue:value forHTTPHeaderField:field];
28+
}
29+
}];
30+
31+
if (parameters) {
32+
if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) {
33+
[mutableRequest setValue:@"text/plain; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
34+
}
35+
36+
[mutableRequest setHTTPBody: [[parameters valueForKey:@"text"] dataUsingEncoding:NSUTF8StringEncoding]];
37+
}
38+
39+
return mutableRequest;
40+
}
41+
42+
#pragma mark - NSSecureCoding
43+
44+
- (instancetype)initWithCoder:(NSCoder *)decoder {
45+
self = [super initWithCoder:decoder];
46+
if (!self) {
47+
return nil;
48+
}
49+
50+
return self;
51+
}
52+
53+
@end

test/app-test-definitions.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const hooks = {
88
const helpers = {
99
acceptAllCerts: function(done) { cordova.plugin.http.acceptAllCerts(true, done, done); },
1010
setJsonSerializer: function(done) { done(cordova.plugin.http.setDataSerializer('json')); },
11+
setUtf8StringSerializer: function(done) { done(cordova.plugin.http.setDataSerializer('utf8')); },
1112
setUrlEncodedSerializer: function(done) { done(cordova.plugin.http.setDataSerializer('urlencoded')); },
1213
getWithXhr: function(done, url) {
1314
var xhr = new XMLHttpRequest();
@@ -382,6 +383,17 @@ const tests = [
382383
cookies.myCookie.should.be.equal('myValue');
383384
cookies.mySecondCookie.should.be.equal('mySecondValue');
384385
}
386+
},{
387+
description: 'should send UTF-8 encoded raw string correctly (POST)',
388+
expected: 'resolved: {"status": 200, "data": "{\\"data\\": \\"this is a test string\\"...',
389+
before: helpers.setUtf8StringSerializer,
390+
func: function(resolve, reject) {
391+
cordova.plugin.http.post('http://httpbin.org/anything', { text: 'this is a test string' }, {}, resolve, reject);
392+
},
393+
validationFunc: function(driver, result) {
394+
result.type.should.be.equal('resolved');
395+
JSON.parse(result.data.data).data.should.eql('this is a test string');
396+
}
385397
}
386398
];
387399

www/advanced-http.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,15 @@
2020
* under the License.
2121
*
2222
* Modified by Andrew Stephan for Sync OnSet
23-
* Modified by Sefa Ilkimen:
24-
* - added configurable params serializer
25-
* - added put and delete methods
26-
* - using cordova www module pattern
27-
* - some minor improvements
28-
*
23+
* Modified by Sefa Ilkimen
2924
*/
3025

3126
/*
3227
* An HTTP Plugin for PhoneGap.
3328
*/
3429

3530
var pluginId = module.id.slice(0, module.id.indexOf('.'));
36-
var validSerializers = ['urlencoded', 'json', 'raw' ];
31+
var validSerializers = ['urlencoded', 'json', 'utf8' ];
3732

3833
var exec = require('cordova/exec');
3934
var angularIntegration = require(pluginId +'.angular-integration');

0 commit comments

Comments
 (0)