| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import type * as Common from '../../core/common/common.js'; |
| import type * as Platform from '../../core/platform/platform.js'; |
| |
| import type {ContentDataOrError} from './ContentData.js'; |
| import type {StreamingContentDataOrError} from './StreamingContentData.js'; |
| import type {WasmDisassembly} from './WasmDisassembly.js'; |
| |
| export interface ContentProvider { |
| contentURL(): Platform.DevToolsPath.UrlString; |
| contentType(): Common.ResourceType.ResourceType; |
| requestContentData(): Promise<ContentDataOrError>; |
| searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<SearchMatch[]>; |
| } |
| |
| export class SearchMatch { |
| constructor( |
| readonly lineNumber: number, readonly lineContent: string, readonly columnNumber: number, |
| readonly matchLength: number) { |
| } |
| |
| static comparator(a: SearchMatch, b: SearchMatch): number { |
| return a.lineNumber - b.lineNumber || a.columnNumber - b.columnNumber; |
| } |
| } |
| |
| export const contentAsDataURL = function( |
| content: string|null, mimeType: string, contentEncoded: boolean, charset?: string|null, |
| limitSize = true): string|null { |
| const maxDataUrlSize = 1024 * 1024; |
| if (content === undefined || content === null || (limitSize && content.length > maxDataUrlSize)) { |
| return null; |
| } |
| |
| content = contentEncoded ? content : encodeURIComponent(content); |
| return 'data:' + mimeType + (charset ? ';charset=' + charset : '') + (contentEncoded ? ';base64' : '') + ',' + |
| content; |
| }; |
| |
| export type DeferredContent = { |
| content: string, |
| isEncoded: boolean, |
| }|{ |
| content: '', |
| isEncoded: false, |
| wasmDisassemblyInfo: WasmDisassembly, |
| }|{ |
| content: null, |
| error: string, |
| isEncoded: boolean, |
| }; |
| |
| /** |
| * Some ContentProvider like NetworkRequests might never actually be able to return |
| * a fully completed "requestContentData" as the request keeps on going indefinitely. |
| * Such proivders can implement the "StreamingContentProvider" addition, which allows |
| * for partial/streaming content. |
| **/ |
| export interface StreamingContentProvider extends ContentProvider { |
| requestStreamingContent(): Promise<StreamingContentDataOrError>; |
| } |
| |
| export const isStreamingContentProvider = function(provider: ContentProvider): provider is StreamingContentProvider { |
| return 'requestStreamingContent' in provider; |
| }; |