Skip to content

Commit 6972e92

Browse files
committed
Merge pull request #1727 from NativeScript/cankov/network-spike
WebInspector infrastructure
2 parents cfbce3a + 355fdde commit 6972e92

File tree

10 files changed

+3184
-38
lines changed

10 files changed

+3184
-38
lines changed

debugger/InspectorBackendCommands.ios.ts

Lines changed: 2841 additions & 0 deletions
Large diffs are not rendered by default.

debugger/debugger.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
export namespace domains {
2+
export namespace network {
3+
export interface NetworkDomainDebugger {
4+
create(): domains.network.NetworkRequest;
5+
}
6+
7+
export interface Headers {
8+
}
9+
10+
export interface Request {
11+
url: string;
12+
method: string;
13+
headers: domains.network.Headers;
14+
postData?: string;
15+
}
16+
17+
export interface Response {
18+
url: string;
19+
status: number;
20+
statusText: string;
21+
headers: Headers;
22+
headersText?: string;
23+
mimeType: string;
24+
requestHeaders?: domains.network.Headers;
25+
requestHeadersText?: string;
26+
fromDiskCache?: boolean;
27+
}
28+
29+
export interface NetworkRequest {
30+
mimeType: string;
31+
data: any;
32+
responseReceived(response: domains.network.Response);
33+
loadingFinished();
34+
requestWillBeSent(request: domains.network.Request);
35+
}
36+
}
37+
}
38+
39+
export var network: domains.network.NetworkDomainDebugger;

debugger/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "name" : "debugger",
2+
"main" : "debugger.js" }

debugger/webinspector.ios.ts

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
import * as inspectorCommandTypes from "./InspectorBackendCommands.ios";
2+
var inspectorCommands: typeof inspectorCommandTypes = require("./InspectorBackendCommands");
3+
4+
import * as debuggerDomains from "./debugger";
5+
6+
declare var __inspectorTimestamp;
7+
8+
const frameId = "NativeScriptMainFrameIdentifier";
9+
const loaderId = "Loader Identifier";
10+
11+
var resources_datas = [];
12+
13+
var documentTypeByMimeType = {
14+
"text/xml": "Document",
15+
"text/plain": "Document",
16+
"text/html": "Document",
17+
"application/xml": "Document",
18+
"application/xhtml+xml": "Document",
19+
"text/css": "Stylesheet",
20+
"text/javascript": "Script",
21+
"text/ecmascript": "Script",
22+
"application/javascript": "Script",
23+
"application/ecmascript": "Script",
24+
"application/x-javascript": "Script",
25+
"application/json": "Script",
26+
"application/x-json": "Script",
27+
"text/x-javascript": "Script",
28+
"text/x-json": "Script",
29+
"text/typescript": "Script"
30+
}
31+
32+
export class Request {
33+
34+
private _resourceType: string;
35+
private _data: any;
36+
private _mimeType: string;
37+
38+
constructor(private _networkDomainDebugger: NetworkDomainDebugger, private _requestID: string) {
39+
}
40+
41+
get mimeType(): string {
42+
return this._mimeType;
43+
}
44+
45+
set mimeType(value: string) {
46+
if (this._mimeType !== value) {
47+
this._mimeType = value;
48+
49+
var resourceType = "Other";
50+
51+
if (this._mimeType in documentTypeByMimeType) {
52+
resourceType = documentTypeByMimeType[this._mimeType];
53+
}
54+
55+
if(this._mimeType.indexOf("image/") !== -1) {
56+
resourceType = "Image";
57+
}
58+
59+
if (this._mimeType.indexOf("font/") !== -1) {
60+
resourceType = "Font";
61+
}
62+
63+
this._resourceType = resourceType;
64+
}
65+
}
66+
67+
get requestID(): string {
68+
return this._requestID;
69+
}
70+
71+
get hasTextContent(): boolean {
72+
return [ "Document", "Stylesheet", "Script", "XHR" ].indexOf(this._resourceType) !== -1;
73+
}
74+
75+
get data(): any {
76+
return this._data;
77+
}
78+
79+
set data(value: any) {
80+
if (this._data !== value) {
81+
this._data = value;
82+
}
83+
}
84+
85+
get resourceType() {
86+
return this._resourceType;
87+
}
88+
89+
set resourceType(value: string) {
90+
if (this._resourceType !== value) {
91+
this._resourceType = value;
92+
}
93+
}
94+
95+
public responseReceived(response: inspectorCommandTypes.NetworkDomain.Response): void {
96+
if (this._networkDomainDebugger.enabled) {
97+
this._networkDomainDebugger.events.responseReceived(this.requestID, frameId, loaderId, __inspectorTimestamp(), <any>this.resourceType, response);
98+
}
99+
}
100+
101+
public loadingFinished(): void {
102+
if (this._networkDomainDebugger.enabled) {
103+
this._networkDomainDebugger.events.loadingFinished(this.requestID, __inspectorTimestamp());
104+
}
105+
}
106+
107+
public requestWillBeSent(request: inspectorCommandTypes.NetworkDomain.Request): void {
108+
if (this._networkDomainDebugger.enabled) {
109+
this._networkDomainDebugger.events.requestWillBeSent(this.requestID, frameId, loaderId, request.url, request, __inspectorTimestamp(), { type: 'Script' });
110+
}
111+
}
112+
}
113+
114+
@inspectorCommands.DomainDispatcher("Network")
115+
export class NetworkDomainDebugger implements inspectorCommandTypes.NetworkDomain.NetworkDomainDispatcher {
116+
private _enabled: boolean;
117+
public events: inspectorCommandTypes.NetworkDomain.NetworkFrontend;
118+
119+
constructor(dispatchMessage: (message: String) => void) {
120+
this.events = new inspectorCommands.NetworkDomain.NetworkFrontend(dispatchMessage);
121+
}
122+
123+
get enabled(): boolean {
124+
return this._enabled;
125+
}
126+
127+
/**
128+
* Enables network tracking, network events will now be delivered to the client.
129+
*/
130+
enable(): void {
131+
if (debuggerDomains.network) {
132+
throw new Error("One NetworkDomainDebugger may be enabled at a time.");
133+
} else {
134+
debuggerDomains.network = this;
135+
}
136+
this._enabled = true;
137+
}
138+
139+
/**
140+
* Disables network tracking, prevents network events from being sent to the client.
141+
*/
142+
disable(): void {
143+
if (debuggerDomains.network === this) {
144+
debuggerDomains.network = null;
145+
}
146+
this._enabled = false;
147+
}
148+
149+
/**
150+
* Specifies whether to always send extra HTTP headers with the requests from this page.
151+
*/
152+
setExtraHTTPHeaders(params: inspectorCommandTypes.NetworkDomain.SetExtraHTTPHeadersMethodArguments): void {
153+
//
154+
}
155+
156+
/**
157+
* Returns content served for the given request.
158+
*/
159+
getResponseBody(params: inspectorCommandTypes.NetworkDomain.GetResponseBodyMethodArguments): { body: string, base64Encoded: boolean } {
160+
var resource_data = resources_datas[params.requestId];
161+
var body = resource_data.hasTextContent ? NSString.alloc().initWithDataEncoding(resource_data.data, 4).toString() :
162+
resource_data.data.base64EncodedStringWithOptions(0);
163+
164+
if(resource_data) {
165+
return {
166+
body: body,
167+
base64Encoded: !resource_data.hasTextContent
168+
};
169+
}
170+
}
171+
172+
/**
173+
* Tells whether clearing browser cache is supported.
174+
*/
175+
canClearBrowserCache(): { result: boolean } {
176+
return {
177+
result: false
178+
};
179+
}
180+
181+
/**
182+
* Clears browser cache.
183+
*/
184+
clearBrowserCache(): void {
185+
//
186+
}
187+
188+
/**
189+
* Tells whether clearing browser cookies is supported.
190+
*/
191+
canClearBrowserCookies(): { result: boolean } {
192+
return {
193+
result: false
194+
};
195+
}
196+
197+
/**
198+
* Clears browser cookies.
199+
*/
200+
clearBrowserCookies(): void {
201+
//
202+
}
203+
204+
/**
205+
* Toggles ignoring cache for each request. If <code>true</code>, cache will not be used.
206+
*/
207+
setCacheDisabled(params: inspectorCommandTypes.NetworkDomain.SetCacheDisabledMethodArguments): void {
208+
//
209+
}
210+
211+
/**
212+
* Loads a resource in the context of a frame on the inspected page without cross origin checks.
213+
*/
214+
loadResource(params: inspectorCommandTypes.NetworkDomain.LoadResourceMethodArguments): { content: string, mimeType: string, status: number } {
215+
return {
216+
content: "",
217+
mimeType: "",
218+
status: 200
219+
}
220+
}
221+
222+
public static idSequence: number = 0;
223+
create(): Request {
224+
let id = (++NetworkDomainDebugger.idSequence).toString();
225+
let resourceData = new Request(this, id);
226+
resources_datas[id] = resourceData;
227+
return resourceData;
228+
}
229+
}

globals/decorators.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
if (typeof global.__decorate !== "function") {
2+
global.__decorate = function (decorators, target, key, desc) {
3+
var c = arguments.length;
4+
var r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5+
6+
if (typeof global.Reflect === "object" && typeof global.Reflect.decorate === "function") {
7+
r = global.Reflect.decorate(decorators, target, key, desc);
8+
}
9+
else {
10+
for (var i = decorators.length - 1; i >= 0; i--) {
11+
if (d = decorators[i]) {
12+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13+
}
14+
}
15+
}
16+
return c > 3 && r && Object.defineProperty(target, key, r), r;
17+
}
18+
}
19+
20+
if (typeof global.__metadata !== "function") {
21+
global.__metadata = function (k, v) {
22+
if (typeof global.Reflect === "object" && typeof global.Reflect.metadata === "function") {
23+
return global.Reflect.metadata(k, v);
24+
}
25+
};
26+
}
27+
28+
if (typeof global.__param !== "function") {
29+
global.__param = (global && global.__param) || function (paramIndex, decorator) {
30+
return function (target, key) { decorator(target, key, paramIndex); }
31+
};
32+
}

globals/globals.ts

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -100,38 +100,7 @@ if (platform.device.os === platform.platformNames.android) {
100100
global.console.dump = function (args) { c.dump(args); };
101101
}
102102

103-
if (typeof global.__decorate !== "function") {
104-
global.__decorate = function (decorators, target, key, desc) {
105-
var c = arguments.length;
106-
var r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
107-
108-
if (typeof global.Reflect === "object" && typeof global.Reflect.decorate === "function") {
109-
r = global.Reflect.decorate(decorators, target, key, desc);
110-
}
111-
else {
112-
for (var i = decorators.length - 1; i >= 0; i--) {
113-
if (d = decorators[i]) {
114-
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
115-
}
116-
}
117-
}
118-
return c > 3 && r && Object.defineProperty(target, key, r), r;
119-
}
120-
}
121-
122-
if (typeof global.__metadata !== "function") {
123-
global.__metadata = function (k, v) {
124-
if (typeof global.Reflect === "object" && typeof global.Reflect.metadata === "function") {
125-
return global.Reflect.metadata(k, v);
126-
}
127-
};
128-
}
129-
130-
if (typeof global.__param !== "function") {
131-
global.__param = (global && global.__param) || function (paramIndex, decorator) {
132-
return function (target, key) { decorator(target, key, paramIndex); }
133-
};
134-
}
103+
require("./decorators");
135104

136105
export function Deprecated(target: Object, key?: string | symbol, descriptor?: any) {
137106
if (descriptor) {

http/http-request.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@
22

33
declare module "http/http-request" {
44
import http = require("http");
5-
65
export var request: (options: http.HttpRequestOptions) => Promise<http.HttpResponse>;
76
}

0 commit comments

Comments
 (0)