blob: 3a12f34006138ac08bcb2755f24258ffd7be33dd [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "FirebasePerformancePlugin+Internal.h"
@interface FLTHttpMetric ()
@property FIRHTTPMetric *metric;
@end
@implementation FLTHttpMetric
- (instancetype _Nonnull)initWithHTTPMetric:(FIRHTTPMetric *)metric {
self = [self init];
if (self) {
_metric = metric;
}
return self;
}
- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result {
if ([@"HttpMetric#start" isEqualToString:call.method]) {
[self start:result];
} else if ([@"HttpMetric#stop" isEqualToString:call.method]) {
[self stop:call result:result];
} else if ([@"HttpMetric#httpResponseCode" isEqualToString:call.method]) {
[self setHttpResponseCode:call result:result];
} else if ([@"HttpMetric#requestPayloadSize" isEqualToString:call.method]) {
[self requestPayloadSize:call result:result];
} else if ([@"HttpMetric#responseContentType" isEqualToString:call.method]) {
[self responseContentType:call result:result];
} else if ([@"HttpMetric#responsePayloadSize" isEqualToString:call.method]) {
[self responsePayloadSize:call result:result];
} else if ([@"PerformanceAttributes#putAttribute" isEqualToString:call.method]) {
[self putAttribute:call result:result];
} else if ([@"PerformanceAttributes#removeAttribute" isEqualToString:call.method]) {
[self removeAttribute:call result:result];
} else if ([@"PerformanceAttributes#getAttributes" isEqualToString:call.method]) {
[self getAttributes:result];
} else {
result(FlutterMethodNotImplemented);
}
}
- (void)start:(FlutterResult)result {
[_metric start];
result(nil);
}
- (void)stop:(FlutterMethodCall *)call result:(FlutterResult)result {
[_metric stop];
NSNumber *handle = call.arguments[@"handle"];
[FLTFirebasePerformancePlugin removeMethodHandler:handle];
result(nil);
}
- (void)setHttpResponseCode:(FlutterMethodCall *)call result:(FlutterResult)result {
NSNumber *responseCode = call.arguments[@"httpResponseCode"];
if (![responseCode isEqual:[NSNull null]]) _metric.responseCode = [responseCode integerValue];
result(nil);
}
- (void)requestPayloadSize:(FlutterMethodCall *)call result:(FlutterResult)result {
NSNumber *requestPayloadSize = call.arguments[@"requestPayloadSize"];
if (![requestPayloadSize isEqual:[NSNull null]]) {
_metric.requestPayloadSize = [requestPayloadSize longValue];
}
result(nil);
}
- (void)responseContentType:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *responseContentType = call.arguments[@"responseContentType"];
if (![responseContentType isEqual:[NSNull null]]) {
_metric.responseContentType = responseContentType;
}
result(nil);
}
- (void)responsePayloadSize:(FlutterMethodCall *)call result:(FlutterResult)result {
NSNumber *responsePayloadSize = call.arguments[@"responsePayloadSize"];
if (![responsePayloadSize isEqual:[NSNull null]]) {
_metric.responsePayloadSize = [responsePayloadSize longValue];
}
result(nil);
}
- (void)putAttribute:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *name = call.arguments[@"name"];
NSString *value = call.arguments[@"value"];
[_metric setValue:value forAttribute:name];
result(nil);
}
- (void)removeAttribute:(FlutterMethodCall *)call result:(FlutterResult)result {
NSString *name = call.arguments[@"name"];
[_metric removeAttribute:name];
result(nil);
}
- (void)getAttributes:(FlutterResult)result {
result([_metric attributes]);
}
@end