blob: e1542985de13940f4eda70dbddc3ae9aaa9bc498 [file] [log] [blame]
// Copyright 2015 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.
package org.chromium.chrome.browser;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.content_public.browser.WebContents;
import javax.inject.Inject;
import dagger.Reusable;
/**
* This factory creates WebContents objects and the associated native counterpart.
* TODO(dtrainor): Move this to the content/ layer if BrowserContext is ever supported in Java.
*/
@Reusable
public class WebContentsFactory {
@Inject
public WebContentsFactory() {}
/**
* A factory method to build a {@link WebContents} object.
* @param profile The profile with which the {@link WebContents} should be built.
* @param initiallyHidden Whether or not the {@link WebContents} should be initially hidden.
* @return A newly created {@link WebContents} object.
*/
// TODO(https://crbug.com/1099138): Remove static for unit-testability.
public static WebContents createWebContents(Profile profile, boolean initiallyHidden) {
return WebContentsFactoryJni.get().createWebContents(profile, initiallyHidden, false);
}
// TODO(https://crbug.com/1033955): Remove after check discard error is fixed.
private static WebContents createWebContents(
Profile profile, boolean initiallyHidden, boolean initializeRenderer) {
return WebContentsFactoryJni.get().createWebContents(
profile, initiallyHidden, initializeRenderer);
}
/**
* A factory method to build a {@link WebContents} object.
*
* Also creates and initializes the renderer.
*
* @param profile The profile to be used by the WebContents.
* @param initiallyHidden Whether or not the {@link WebContents} should be initially hidden.
* @return A newly created {@link WebContents} object.
*/
public WebContents createWebContentsWithWarmRenderer(Profile profile, boolean initiallyHidden) {
return createWebContents(profile, initiallyHidden, true);
}
@NativeMethods
interface Natives {
WebContents createWebContents(
Profile profile, boolean initiallyHidden, boolean initializeRenderer);
}
}