Index: extensions/shell/app_shell.gyp |
diff --git a/extensions/shell/app_shell.gyp b/extensions/shell/app_shell.gyp |
index c673175bc0023c761ac18bd3cee2e1bb2d9c6b1f..b4e0c63ab8efecaf3759e383989bb34940da2137 100644 |
--- a/extensions/shell/app_shell.gyp |
+++ b/extensions/shell/app_shell.gyp |
@@ -4,6 +4,11 @@ |
{ |
'variables': { |
+ # Product name is used for Mac bundle. |
+ 'app_shell_product_name': 'App Shell', |
+ # The version is high enough to be supported by Omaha (at least 31) |
+ # but fake enough to be obviously not a Chrome release. |
+ 'app_shell_version': '38.1234.5678.9', |
'chromium_code': 1, |
}, |
'targets': [ |
@@ -46,6 +51,8 @@ |
'<(SHARED_INTERMEDIATE_DIR)/extensions/shell', |
], |
'sources': [ |
+ 'app/paths_mac.h', |
+ 'app/paths_mac.mm', |
'app/shell_main_delegate.cc', |
'app/shell_main_delegate.h', |
'browser/api/identity/identity_api.cc', |
@@ -62,6 +69,7 @@ |
'browser/shell_app_delegate.h', |
'browser/shell_app_window_client.cc', |
'browser/shell_app_window_client.h', |
+ 'browser/shell_app_window_client_mac.mm', |
'browser/shell_audio_controller_chromeos.cc', |
'browser/shell_audio_controller_chromeos.h', |
'browser/shell_browser_context.cc', |
@@ -69,8 +77,12 @@ |
'browser/shell_browser_main_delegate.h', |
'browser/shell_browser_main_parts.cc', |
'browser/shell_browser_main_parts.h', |
+ 'browser/shell_browser_main_parts_mac.h', |
+ 'browser/shell_browser_main_parts_mac.mm', |
'browser/shell_content_browser_client.cc', |
'browser/shell_content_browser_client.h', |
+ 'browser/shell_desktop_controller_mac.h', |
+ 'browser/shell_desktop_controller_mac.mm', |
'browser/shell_device_client.cc', |
'browser/shell_device_client.h', |
'browser/shell_display_info_provider.cc', |
@@ -87,6 +99,8 @@ |
'browser/shell_extensions_browser_client.h', |
'browser/shell_native_app_window.cc', |
'browser/shell_native_app_window.h', |
+ 'browser/shell_native_app_window_mac.h', |
+ 'browser/shell_native_app_window_mac.mm', |
'browser/shell_network_controller_chromeos.cc', |
'browser/shell_network_controller_chromeos.h', |
'browser/shell_network_delegate.cc', |
@@ -99,8 +113,6 @@ |
'browser/shell_prefs.h', |
'browser/shell_runtime_api_delegate.cc', |
'browser/shell_runtime_api_delegate.h', |
- 'browser/shell_screen.cc', |
- 'browser/shell_screen.h', |
'browser/shell_special_storage_policy.cc', |
'browser/shell_special_storage_policy.h', |
'browser/shell_speech_recognition_manager_delegate.cc', |
@@ -132,6 +144,8 @@ |
'browser/shell_desktop_controller_aura.h', |
'browser/shell_native_app_window_aura.cc', |
'browser/shell_native_app_window_aura.h', |
+ 'browser/shell_screen.cc', |
+ 'browser/shell_screen.h', |
], |
}], |
['chromeos==1', { |
@@ -169,6 +183,7 @@ |
{ |
'target_name': 'app_shell', |
'type': 'executable', |
+ 'mac_bundle': 1, |
'dependencies': [ |
'app_shell_lib', |
'<(DEPTH)/extensions/extensions.gyp:extensions_shell_and_test_pak', |
@@ -195,8 +210,78 @@ |
'<(DEPTH)/base/allocator/allocator.gyp:allocator', |
], |
}], |
+ ['OS=="mac"', { |
+ 'product_name': '<(app_shell_product_name)', |
+ 'dependencies!': [ |
+ 'app_shell_lib', |
+ ], |
+ 'dependencies': [ |
+ 'app_shell_framework', |
+ 'app_shell_helper', |
+ ], |
+ 'mac_bundle_resources': [ |
+ 'app/app-Info.plist', |
+ ], |
+ # TODO(mark): Come up with a fancier way to do this. It should only |
+ # be necessary to list app-Info.plist once, not the three times it is |
+ # listed here. |
+ 'mac_bundle_resources!': [ |
+ 'app/app-Info.plist', |
+ ], |
+ 'xcode_settings': { |
+ 'INFOPLIST_FILE': 'app/app-Info.plist', |
+ }, |
+ 'copies': [{ |
+ 'destination': '<(PRODUCT_DIR)/<(app_shell_product_name).app/Contents/Frameworks', |
+ 'files': [ |
+ '<(PRODUCT_DIR)/<(app_shell_product_name) Helper.app', |
+ ], |
+ }], |
+ 'postbuilds': [ |
+ { |
+ 'postbuild_name': 'Copy <(app_shell_product_name) Framework.framework', |
+ 'action': [ |
+ '../../build/mac/copy_framework_unversioned.sh', |
+ '${BUILT_PRODUCTS_DIR}/<(app_shell_product_name) Framework.framework', |
+ '${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Frameworks', |
+ ], |
+ }, |
+ { |
+ # Modify the Info.plist as needed. |
+ 'postbuild_name': 'Tweak Info.plist', |
+ 'action': ['../../build/mac/tweak_info_plist.py', |
+ '--scm=1', |
+ '--version=<(app_shell_version)'], |
+ }, |
+ { |
+ # This postbuild step is responsible for creating the following |
+ # helpers: |
+ # |
+ # App Shell Helper EH.app and App Shell Helper NP.app are |
+ # created from App Shell Helper.app. |
+ # |
+ # The EH helper is marked for an executable heap. The NP helper |
+ # is marked for no PIE (ASLR). |
+ 'postbuild_name': 'Make More Helpers', |
+ 'action': [ |
+ '../../build/mac/make_more_helpers.sh', |
+ 'Frameworks', |
+ '<(app_shell_product_name)', |
+ ], |
+ }, |
+ { |
+ # Make sure there isn't any Objective-C in the shell's |
+ # executable. |
+ 'postbuild_name': 'Verify No Objective-C', |
+ 'action': [ |
+ '../../build/mac/verify_no_objc.sh', |
+ ], |
+ }, |
+ ], |
+ }], |
], |
}, |
+ |
{ |
'target_name': 'app_shell_browsertests', |
'type': '<(gtest_target_type)', |
@@ -252,6 +337,11 @@ |
'<(DEPTH)/base/allocator/allocator.gyp:allocator', |
], |
}], |
+ ['OS=="mac"', { |
+ 'dependencies': [ |
+ 'app_shell', # Needed for App Shell.app's Helper. |
+ ], |
+ }], |
], |
}, |
{ |
@@ -266,16 +356,12 @@ |
'<(DEPTH)/extensions/extensions.gyp:extensions_shell_and_test_pak', |
'<(DEPTH)/extensions/extensions.gyp:extensions_test_support', |
'<(DEPTH)/testing/gtest.gyp:gtest', |
- '<(DEPTH)/ui/aura/aura.gyp:aura_test_support', |
], |
'sources': [ |
'../test/extensions_unittests_main.cc', |
'browser/api/identity/identity_api_unittest.cc', |
- 'browser/shell_audio_controller_chromeos_unittest.cc', |
- 'browser/shell_native_app_window_aura_unittest.cc', |
'browser/shell_oauth2_token_service_unittest.cc', |
'browser/shell_prefs_unittest.cc', |
- 'browser/shell_screen_unittest.cc', |
'common/shell_content_client_unittest.cc' |
], |
'conditions': [ |
@@ -287,6 +373,11 @@ |
['use_aura==1', { |
'sources': [ |
'browser/shell_desktop_controller_aura_unittest.cc', |
+ 'browser/shell_native_app_window_aura_unittest.cc', |
+ 'browser/shell_screen_unittest.cc', |
+ ], |
+ 'dependencies': [ |
+ '<(DEPTH)/ui/aura/aura.gyp:aura_test_support', |
], |
}], |
['chromeos==1', { |
@@ -295,6 +386,7 @@ |
], |
'sources': [ |
'browser/api/shell_gcd/shell_gcd_api_unittest.cc', |
+ 'browser/shell_audio_controller_chromeos_unittest.cc', |
], |
}], |
['OS=="win" and win_use_allocator_shim==1', { |
@@ -342,4 +434,144 @@ |
], |
}, |
], # targets |
+ |
+ 'conditions': [ |
+ ['OS=="mac"', { |
+ 'targets': [ |
+ { |
+ 'target_name': 'app_shell_framework', |
+ 'type': 'shared_library', |
+ 'product_name': '<(app_shell_product_name) Framework', |
+ 'mac_bundle': 1, |
+ 'mac_bundle_resources': [ |
+ '<(PRODUCT_DIR)/extensions_shell_and_test.pak', |
+ 'app/framework-Info.plist', |
+ ], |
+ 'mac_bundle_resources!': [ |
+ 'app/framework-Info.plist', |
+ ], |
+ 'xcode_settings': { |
+ # The framework is placed within the .app's Framework |
+ # directory. DYLIB_INSTALL_NAME_BASE and |
+ # LD_DYLIB_INSTALL_NAME affect -install_name. |
+ 'DYLIB_INSTALL_NAME_BASE': |
+ '@executable_path/../Frameworks', |
+ # See /build/mac/copy_framework_unversioned.sh for |
+ # information on LD_DYLIB_INSTALL_NAME. |
+ 'LD_DYLIB_INSTALL_NAME': |
+ '$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(WRAPPER_NAME)/$(PRODUCT_NAME)', |
+ |
+ 'INFOPLIST_FILE': 'app/framework-Info.plist', |
+ }, |
+ 'dependencies': [ |
+ 'app_shell_lib', |
+ ], |
+ 'include_dirs': [ |
+ '../..', |
+ ], |
+ 'sources': [ |
+ 'app/shell_main_mac.h', |
+ 'app/shell_main_mac.cc', |
+ ], |
+ 'postbuilds': [ |
+ { |
+ # Modify the Info.plist as needed. The script explains why |
+ # this is needed. This is also done in the chrome target. |
+ # The framework needs the Breakpad keys if this feature is |
+ # enabled. It does not need the Keystone keys; these always |
+ # come from the outer application bundle. The framework |
+ # doesn't currently use the SCM keys for anything, |
+ # but this seems like a really good place to store them. |
+ 'postbuild_name': 'Tweak Info.plist', |
+ 'action': ['../../build/mac/tweak_info_plist.py', |
+ '--breakpad=1', |
+ '--keystone=0', |
+ '--scm=1', |
+ '--version=<(app_shell_version)', |
+ '--branding=<(app_shell_product_name)'], |
+ }, |
+ ], |
+ 'conditions': [ |
+ ['icu_use_data_file_flag==1', { |
+ 'mac_bundle_resources': [ |
+ '<(PRODUCT_DIR)/icudtl.dat', |
+ ], |
+ }], |
+ ['v8_use_external_startup_data==1', { |
+ 'mac_bundle_resources': [ |
+ '<(PRODUCT_DIR)/natives_blob.bin', |
+ '<(PRODUCT_DIR)/snapshot_blob.bin', |
+ ], |
+ }], |
+ ], |
+ }, # target app_shell_framework |
+ { |
+ 'target_name': 'app_shell_helper', |
+ 'type': 'executable', |
+ 'variables': { 'enable_wexit_time_destructors': 1, }, |
+ 'product_name': '<(app_shell_product_name) Helper', |
+ 'mac_bundle': 1, |
+ 'dependencies': [ |
+ 'app_shell_framework', |
+ ], |
+ 'sources': [ |
+ 'app/shell_main.cc', |
+ 'app/helper-Info.plist', |
+ ], |
+ # TODO(mark): Come up with a fancier way to do this. It should only |
+ # be necessary to list helper-Info.plist once, not the three times it |
+ # is listed here. |
+ 'mac_bundle_resources!': [ |
+ 'app/helper-Info.plist', |
+ ], |
+ # TODO(mark): For now, don't put any resources into this app. Its |
+ # resources directory will be a symbolic link to the browser app's |
+ # resources directory. |
+ 'mac_bundle_resources/': [ |
+ ['exclude', '.*'], |
+ ], |
+ 'xcode_settings': { |
+ 'INFOPLIST_FILE': 'app/helper-Info.plist', |
+ }, |
+ 'postbuilds': [ |
+ { |
+ # The framework defines its load-time path |
+ # (DYLIB_INSTALL_NAME_BASE) relative to the main executable |
+ # (chrome). A different relative path needs to be used in |
+ # helper_app. |
+ 'postbuild_name': 'Fix Framework Link', |
+ 'action': [ |
+ 'install_name_tool', |
+ '-change', |
+ '@executable_path/../Frameworks/<(app_shell_product_name) Framework.framework/<(app_shell_product_name) Framework', |
+ '@executable_path/../../../<(app_shell_product_name) Framework.framework/<(app_shell_product_name) Framework', |
+ '${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}' |
+ ], |
+ }, |
+ { |
+ # Modify the Info.plist as needed. The script explains why this |
+ # is needed. This is also done in the chrome and chrome_dll |
+ # targets. In this case, --breakpad=0, --keystone=0, and --scm=0 |
+ # are used because Breakpad, Keystone, and SCM keys are |
+ # never placed into the helper. |
+ 'postbuild_name': 'Tweak Info.plist', |
+ 'action': ['../../build/mac/tweak_info_plist.py', |
+ '--breakpad=0', |
+ '--keystone=0', |
+ '--scm=0', |
+ '--version=<(app_shell_version)'], |
+ }, |
+ { |
+ # Make sure there isn't any Objective-C in the helper app's |
+ # executable. |
+ 'postbuild_name': 'Verify No Objective-C', |
+ 'action': [ |
+ '../../build/mac/verify_no_objc.sh', |
+ ], |
+ }, |
+ ], |
+ }, # target app_shell_helper |
+ ], |
+ }], # OS=="mac" |
+ ], |
} |