# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

about_pages = [
    'about',
    'addons',
    'buildconfig',
    'certificate',
    'checkerboard',
    'config',
    'crashcontent',
    'crashparent',
    'crashgpu',
    'crashextensions',
    'credits',
    'fingerprintingprotection',
    'httpsonlyerror',
    'license',
    'logging',
    'logo',
    'memory',
    # Removed 'mozilla'. tor-browser#42831.
    'neterror',
    'networking',
    'performance',
    'processes',
    'serviceworkers',
    'srcdoc',
    'support',
    'translations',
    'telemetry',
    # Removed 'url-classifier'. tor-browser#42831.
]

if defined('MOZ_CRASHREPORTER'):
    about_pages.append('crashes')
if defined('MOZ_WEBRTC'):
    about_pages.append('webrtc')
if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] != 'android':
    about_pages.append('profiles')
if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] == 'windows':
    about_pages.append('third-party')
    about_pages.append('windows-messages')
if defined('MOZ_TELEMETRY_REPORTING') and not defined('MOZ_GLEAN_ANDROID'):
    about_pages.append('glean')
if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] != 'android' and buildconfig.substs['MOZ_WIDGET_TOOLKIT'] != 'windows':
    about_pages.append('webauthn')

Headers = ['/docshell/build/nsDocShellModule.h']

InitFunc = 'mozilla::InitDocShellModule'
UnloadFunc = 'mozilla::UnloadDocShellModule'

Classes = [
    {
        'name': 'DocLoader',
        'cid': '{057b04d0-0ccf-11d2-beba-00805f8a66dc}',
        'contract_ids': ['@mozilla.org/docloaderservice;1'],
        'type': 'nsDocLoader',
        'headers': ['nsDocLoader.h'],
        'init_method': 'Init',
    },
    {
        'name': 'URIFixup',
        'js_name': 'uriFixup',
        'cid': '{c6cf88b7-452e-47eb-bdc9-86e3561648ef}',
        'contract_ids': ['@mozilla.org/docshell/uri-fixup;1'],
        'interfaces': ['nsIURIFixup'],
        'esModule': 'resource://gre/modules/URIFixup.sys.mjs',
        'singleton': True,
        'constructor': 'URIFixup',
    },
    {
        'cid': '{33d75835-722f-42c0-89cc-44f328e56a86}',
        'contract_ids': ['@mozilla.org/docshell/uri-fixup-info;1'],
        'esModule': 'resource://gre/modules/URIFixup.sys.mjs',
        'constructor': 'URIFixupInfo',
    },
    {
        'cid': '{56ebedd4-6ccf-48e8-bdae-adc77f044567}',
        'contract_ids': [
            '@mozilla.org/network/protocol/about;1?what=%s' % path
            for path in about_pages
        ],
        'legacy_constructor': 'nsAboutRedirector::Create',
        'headers': ['/docshell/base/nsAboutRedirector.h'],
    },
    {
        'name': 'ExternalProtocolHandler',
        'cid': '{bd6390c8-fbea-11d4-98f6-001083010e9b}',
        'contract_ids': ['@mozilla.org/network/protocol;1?name=default'],
        'type': 'nsExternalProtocolHandler',
        'headers': ['/uriloader/exthandler/nsExternalProtocolHandler.h'],
        'protocol_config': {
            'scheme': 'default',
            'flags': [
                'URI_NORELATIVE',
                'URI_NOAUTH',
                'URI_LOADABLE_BY_ANYONE',
                'URI_NON_PERSISTABLE',
                'URI_DOES_NOT_RETURN_DATA',
            ],
            'default_port': 0,
        },
        'processes': ProcessSelector.ALLOW_IN_SOCKET_PROCESS,
    },
    {
        'cid': '{95790842-75a0-430d-98bf-f5ce3788ea6d}',
        'contract_ids': ['@mozilla.org/ospermissionrequest;1'],
        'type': 'nsOSPermissionRequest',
        'headers': ['nsOSPermissionRequest.h'],
        'processes': ProcessSelector.MAIN_PROCESS_ONLY,
    },
    {
        'name': 'Prefetch',
        'cid': '{6b8bdffc-3394-417d-be83-a81b7c0f63bf}',
        'contract_ids': ['@mozilla.org/prefetch-service;1'],
        'type': 'nsPrefetchService',
        'headers': ['/uriloader/prefetch/nsPrefetchService.h'],
        'init_method': 'Init',
    },
    {
        'cid': '{c4b6fb7c-bfb1-49dc-a65f-035796524b53}',
        'contract_ids': ['@mozilla.org/uriloader/handler-service;1'],
        'type': 'nsIHandlerService',
        'headers': ['ContentHandlerService.h'],
        'constructor': 'mozilla::dom::ContentHandlerService::Create',
    },
    {
        'cid': '{bc0017e3-2438-47be-a567-41db58f17627}',
        'contract_ids': ['@mozilla.org/uriloader/local-handler-app;1'],
        'type': 'PlatformLocalHandlerApp_t',
        'headers': ['/uriloader/exthandler/nsLocalHandlerApp.h'],
    },
    {
        'name': 'URILoader',
        'cid': '{9f6d5d40-90e7-11d3-af80-00a024ffc08c}',
        'contract_ids': ['@mozilla.org/uriloader;1'],
        'type': 'nsURILoader',
        'headers': ['nsURILoader.h'],
    },
    {
        'cid': '{f30bc0a2-958b-4287-bf62-ce38ba0c811e}',
        'contract_ids': ['@mozilla.org/webnavigation-info;1'],
        'type': 'nsWebNavigationInfo',
        'headers': ['/docshell/base/nsWebNavigationInfo.h'],
    },
]

if defined('MOZ_ENABLE_DBUS'):
    Classes += [
        {
            'name': 'DBusHandlerApp',
            'cid': '{6c3c274b-4cbf-4bb5-a635-05ad2cbb6535}',
            'contract_ids': ['@mozilla.org/uriloader/dbus-handler-app;1'],
            'type': 'nsDBusHandlerApp',
            'headers': ['/uriloader/exthandler/nsDBusHandlerApp.h'],
        },
    ]

if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] == 'android':
    Classes += [
        # Android has its own externel-helper-app-service, so we omit
        # that here for nsExternalHelperAppService.
        {
            'cid': '{a7f800e0-4306-11d4-98d0-001083010e9b}',
            'contract_ids': [
                '@mozilla.org/mime;1',
                '@mozilla.org/uriloader/external-protocol-service;1',
            ],
            'type': 'nsExternalHelperAppService',
            'constructor': 'nsExternalHelperAppService::GetSingleton',
            'headers': ['nsExternalHelperAppService.h'],
            'init_method': 'Init',
            'processes': ProcessSelector.ALLOW_IN_SOCKET_PROCESS,
        },
    ]
else:
    Classes += [
        {
            'cid': '{a7f800e0-4306-11d4-98d0-001083010e9b}',
            'contract_ids': [
                '@mozilla.org/mime;1',
                '@mozilla.org/uriloader/external-helper-app-service;1',
                '@mozilla.org/uriloader/external-protocol-service;1',
            ],
            'type': 'nsExternalHelperAppService',
            'constructor': 'nsExternalHelperAppService::GetSingleton',
            'headers': ['nsExternalHelperAppService.h'],
            'init_method': 'Init',
            'processes': ProcessSelector.ALLOW_IN_SOCKET_PROCESS,
        },
    ]
