2014-10-31 18:17:05 +00:00
|
|
|
// Copyright (c) 2013 GitHub, Inc.
|
2014-04-25 09:49:37 +00:00
|
|
|
// Use of this source code is governed by the MIT license that can be
|
2013-05-02 12:09:19 +00:00
|
|
|
// found in the LICENSE file.
|
|
|
|
|
2019-06-19 20:46:59 +00:00
|
|
|
#include "shell/browser/electron_browser_main_parts.h"
|
2013-05-02 12:09:19 +00:00
|
|
|
|
2022-09-23 18:50:46 +00:00
|
|
|
#include <string>
|
|
|
|
|
2023-05-23 19:58:58 +00:00
|
|
|
#include "base/apple/bundle_locations.h"
|
chore: bump chromium to 118.0.5975.0 (main) (#39531)
* chore: bump chromium in DEPS to 118.0.5951.0
* chore: update printing.patch
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4727894
No logic changes, but patch needed to be manually re-applied due to upstream code shear
* chore: update port_autofill_colors_to_the_color_pipeline.patch
No manual changes; patch applied with fuzz
* chore: update patches
* chore: bump chromium in DEPS to 118.0.5953.0
* chore: update patches
* chore: bump chromium in DEPS to 118.0.5955.0
* chore: update patches
* chore: bump chromium in DEPS to 118.0.5957.0
* chore: update patches
* chore: include path of native_web_keyboard_event.h
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4758689
* chore: remove reference to eextensions/browser/notification-types.h
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4771627
* chore: update references to renamed upstream field NativeWebKeyboardEvent.skip_if_unhandled (formerly known as skip_in_browser
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4758689
Need a second pair of eyes on this commit. In particular the reference in content_converter.cc, skipInBrowser, seems to not be set or documented anywhere? Is this unused/vestigal code?
* chore: sync signature of ElectronExtensionsBrowserClient::IsValidContext() to upstream change
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4784198
* chore: add auto_pip_setting_helper.[cc,h] to chromium_src build
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4688277
Exiting upstream code used by chromium_src now depends on this new upstream class
* chore: bump chromium in DEPS to 118.0.5959.0
* chore: update add_maximized_parameter_to_linuxui_getwindowframeprovider.patch
Xref: add_maximized_parameter_to_linuxui_getwindowframeprovider.patch
manually adjust patch to minor upstream chagnes
* chore: update patches
* chore: bump chromium in DEPS to 118.0.5961.0
* chore: bump chromium in DEPS to 118.0.5963.0
* chore: update patches
* 4780994: Rename various base files to "apple" since iOS uses them too
https://chromium-review.googlesource.com/c/chromium/src/+/4780994
* Many files moved from `mac` -> `apple`
This commit follows a handful of CLs that simply rename files/symbols to change `mac`
to `apple`
to signify their use across both macOS and iOS:
- 4784010: Move scoped_nsautorelease_pool to base/apple, leave a forwarding header
- 4790744: Move foundation_util to base/apple, leave a forwarding header
- 4790741: Move scoped_cftypreref to base/apple, leave a forwarding header
- 4787627: Move and rename macOS+iOS base/ files in PA to "apple"
- 4780399: Move OSStatus logging to base/apple
- 4787387: Remove forwarding headers
- 4781113: Rename message_pump_mac to "apple" because iOS uses it too
* fixup minor patch update error
A function param got dropped from this patch somewhere earlier
* chore: bump chromium in DEPS to 118.0.5965.2
* chore: update patches
* 4799213: Move ScopedTypeRef and ScopedCFTypeRef into base::apple::
https://chromium-review.googlesource.com/c/chromium/src/+/4799213
* Fix removed include to BrowserContext
In crrev.com/c/4767962 an include to BrowserContext was removed,
which was necessary for compilation. This broke only for us because
"chrome/browser/profiles/profile.h" includes that class, but we remove
all references to profiles.
* chore: bump chromium in DEPS to 118.0.5967.0
* chore: update patches
* chore: bump chromium in DEPS to 118.0.5969.0
* chore: update patches
* chore: bump chromium in DEPS to 118.0.5971.0
* chore: bump chromium in DEPS to 118.0.5973.0
* chore: update patches
* 4772121: [OOPIF PDF] Replace PDFWebContentsHelper with PDFDocumentHelper
https://chromium-review.googlesource.com/c/chromium/src/+/4772121
* 4811164: [Extensions] Do some cleanup in ChromeManagementAPIDelegate.
https://chromium-review.googlesource.com/c/chromium/src/+/4811164
* 4809488: Remove duplicate dnd functionality between Web and Renderer prefs
https://chromium-review.googlesource.com/c/chromium/src/+/4809488
Given that this is no longer an option of web preferences, we should
consider deprecating this option and then removing it.
* chore: bump chromium in DEPS to 118.0.5975.0
* chore: update patches
* fixup! chore: add auto_pip_settings_helper.{cc|h} to chromium_src build
* Reland "[windows] Remove RegKey::DeleteEmptyKey"
Refs https://chromium-review.googlesource.com/c/chromium/src/+/4813255
* Ensure StrCat means StrCat
Refs https://chromium-review.googlesource.com/c/chromium/src/+/1117180
* fixup! Remove RegKey::DeleteEmptyKey
* Consistently reject large p and large q in DH
Refs https://boringssl-review.googlesource.com/c/boringssl/+/62226
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: clavin <clavin@electronjs.org>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2023-09-01 06:54:59 +00:00
|
|
|
#include "base/apple/foundation_util.h"
|
2019-10-21 21:11:09 +00:00
|
|
|
#include "base/path_service.h"
|
2024-03-15 18:03:42 +00:00
|
|
|
#include "services/device/public/cpp/geolocation/geolocation_system_permission_manager.h"
|
2024-04-15 22:10:32 +00:00
|
|
|
#include "services/device/public/cpp/geolocation/system_geolocation_source_apple.h"
|
2023-03-16 10:03:53 +00:00
|
|
|
#include "shell/browser/browser_process_impl.h"
|
2023-08-23 13:54:21 +00:00
|
|
|
#include "shell/browser/mac/electron_application.h"
|
2019-06-19 20:46:59 +00:00
|
|
|
#include "shell/browser/mac/electron_application_delegate.h"
|
2020-05-07 20:31:26 +00:00
|
|
|
#include "shell/common/electron_paths.h"
|
2019-10-21 21:11:09 +00:00
|
|
|
#include "ui/base/l10n/l10n_util_mac.h"
|
2013-05-02 12:09:19 +00:00
|
|
|
|
|
|
|
namespace electron {
|
|
|
|
|
2023-07-18 22:26:27 +00:00
|
|
|
static ElectronApplicationDelegate* __strong delegate_;
|
|
|
|
|
2021-05-19 23:15:47 +00:00
|
|
|
void ElectronBrowserMainParts::PreCreateMainMessageLoop() {
|
2016-01-08 04:06:06 +00:00
|
|
|
// Set our own application delegate.
|
2023-07-18 22:26:27 +00:00
|
|
|
delegate_ = [[ElectronApplicationDelegate alloc] init];
|
|
|
|
[NSApp setDelegate:delegate_];
|
2013-05-02 12:09:19 +00:00
|
|
|
|
2021-05-19 23:15:47 +00:00
|
|
|
PreCreateMainMessageLoopCommon();
|
2013-05-31 02:17:40 +00:00
|
|
|
|
|
|
|
// Prevent Cocoa from turning command-line arguments into
|
|
|
|
// |-application:openFiles:|, since we already handle them directly.
|
|
|
|
[[NSUserDefaults standardUserDefaults]
|
2018-04-20 18:47:04 +00:00
|
|
|
setObject:@"NO"
|
|
|
|
forKey:@"NSTreatUnknownArgumentsAsOpen"];
|
2021-06-29 03:26:57 +00:00
|
|
|
|
2024-03-15 18:03:42 +00:00
|
|
|
if (!device::GeolocationSystemPermissionManager::GetInstance()) {
|
|
|
|
device::GeolocationSystemPermissionManager::SetInstance(
|
2024-04-15 22:10:32 +00:00
|
|
|
device::SystemGeolocationSourceApple::
|
|
|
|
CreateGeolocationSystemPermissionManager());
|
2023-03-16 10:03:53 +00:00
|
|
|
}
|
2013-05-02 12:09:19 +00:00
|
|
|
}
|
|
|
|
|
2015-11-04 09:23:27 +00:00
|
|
|
void ElectronBrowserMainParts::FreeAppDelegate() {
|
2023-07-18 22:26:27 +00:00
|
|
|
delegate_ = nil;
|
2014-11-17 01:52:24 +00:00
|
|
|
[NSApp setDelegate:nil];
|
2013-05-30 08:03:10 +00:00
|
|
|
}
|
|
|
|
|
2019-10-10 15:54:03 +00:00
|
|
|
void ElectronBrowserMainParts::RegisterURLHandler() {
|
2020-02-21 19:05:03 +00:00
|
|
|
[[AtomApplication sharedApplication] registerURLHandler];
|
2019-10-10 15:54:03 +00:00
|
|
|
}
|
|
|
|
|
2019-10-21 21:11:09 +00:00
|
|
|
// Replicates NSApplicationMain, but doesn't start a run loop.
|
|
|
|
void ElectronBrowserMainParts::InitializeMainNib() {
|
2023-05-23 19:58:58 +00:00
|
|
|
auto infoDictionary = base::apple::OuterBundle().infoDictionary;
|
2019-10-21 21:11:09 +00:00
|
|
|
|
|
|
|
auto principalClass =
|
|
|
|
NSClassFromString([infoDictionary objectForKey:@"NSPrincipalClass"]);
|
|
|
|
auto application = [principalClass sharedApplication];
|
|
|
|
|
|
|
|
NSString* mainNibName = [infoDictionary objectForKey:@"NSMainNibFile"];
|
|
|
|
|
|
|
|
NSNib* mainNib;
|
|
|
|
|
|
|
|
@try {
|
|
|
|
mainNib = [[NSNib alloc] initWithNibNamed:mainNibName
|
2023-05-23 19:58:58 +00:00
|
|
|
bundle:base::apple::FrameworkBundle()];
|
2019-10-21 21:11:09 +00:00
|
|
|
// Handle failure of initWithNibNamed on SMB shares
|
|
|
|
// TODO(codebytere): Remove when
|
|
|
|
// https://bugs.chromium.org/p/chromium/issues/detail?id=932935 is fixed
|
|
|
|
} @catch (NSException* exception) {
|
|
|
|
NSString* nibPath =
|
|
|
|
[NSString stringWithFormat:@"Resources/%@.nib", mainNibName];
|
2023-05-23 19:58:58 +00:00
|
|
|
nibPath = [base::apple::FrameworkBundle().bundlePath
|
2019-10-21 21:11:09 +00:00
|
|
|
stringByAppendingPathComponent:nibPath];
|
|
|
|
|
|
|
|
NSData* data = [NSData dataWithContentsOfFile:nibPath];
|
|
|
|
mainNib = [[NSNib alloc] initWithNibData:data
|
2023-05-23 19:58:58 +00:00
|
|
|
bundle:base::apple::FrameworkBundle()];
|
2019-10-21 21:11:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[mainNib instantiateWithOwner:application topLevelObjects:nil];
|
2018-10-23 20:15:55 +00:00
|
|
|
}
|
|
|
|
|
2022-09-23 18:50:46 +00:00
|
|
|
std::string ElectronBrowserMainParts::GetCurrentSystemLocale() {
|
|
|
|
NSString* systemLocaleIdentifier =
|
|
|
|
[[NSLocale currentLocale] localeIdentifier];
|
|
|
|
|
|
|
|
// Mac OS X uses "_" instead of "-", so swap to get a real locale value.
|
|
|
|
std::string locale_value = [[systemLocaleIdentifier
|
|
|
|
stringByReplacingOccurrencesOfString:@"_"
|
|
|
|
withString:@"-"] UTF8String];
|
|
|
|
|
|
|
|
return locale_value;
|
|
|
|
}
|
|
|
|
|
2013-05-02 12:09:19 +00:00
|
|
|
} // namespace electron
|