| // Copyright 2014 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 {ContentData, type ContentDataOrError} from './ContentData.js'; |
| import type {ContentProvider, SearchMatch} from './ContentProvider.js'; |
| import {performSearchInContentData} from './TextUtils.js'; |
| |
| export class StaticContentProvider implements ContentProvider { |
| readonly #contentURL: Platform.DevToolsPath.UrlString; |
| readonly #contentType: Common.ResourceType.ResourceType; |
| readonly #lazyContent: () => Promise<ContentDataOrError>; |
| |
| constructor( |
| contentURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType, |
| lazyContent: () => Promise<ContentDataOrError>) { |
| this.#contentURL = contentURL; |
| this.#contentType = contentType; |
| this.#lazyContent = lazyContent; |
| } |
| |
| static fromString( |
| contentURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType, |
| content: string): StaticContentProvider { |
| const lazyContent = (): Promise<ContentData> => |
| Promise.resolve(new ContentData(content, /* isBase64 */ false, contentType.canonicalMimeType())); |
| return new StaticContentProvider(contentURL, contentType, lazyContent); |
| } |
| |
| contentURL(): Platform.DevToolsPath.UrlString { |
| return this.#contentURL; |
| } |
| |
| contentType(): Common.ResourceType.ResourceType { |
| return this.#contentType; |
| } |
| |
| requestContentData(): Promise<ContentDataOrError> { |
| return this.#lazyContent(); |
| } |
| |
| async searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<SearchMatch[]> { |
| const contentData = await this.requestContentData(); |
| return performSearchInContentData(contentData, query, caseSensitive, isRegex); |
| } |
| } |