Use git apply for applying patch files (issue #1825)
This commit is contained in:
parent
a2b8c250a8
commit
4fe6ac0d4b
|
@ -46,7 +46,4 @@ Thumbs.db
|
||||||
/binary_distrib
|
/binary_distrib
|
||||||
/docs
|
/docs
|
||||||
# CEF generated files
|
# CEF generated files
|
||||||
/include/cef_pack_resources.h
|
|
||||||
/include/cef_pack_strings.h
|
|
||||||
/include/cef_version.h
|
/include/cef_version.h
|
||||||
/patch/patch_state.h
|
|
||||||
|
|
|
@ -1,20 +1,15 @@
|
||||||
There may be instances where CEF requires changes to the Chromium/WebKit code
|
There may be instances where CEF requires changes to the source code for
|
||||||
base that are not desired by the Chromium/WebKit projects as a whole. To address
|
Chromium, Blink or third-party projects that are either not desired by those
|
||||||
this situation the CEF project adds a patch capability as part of the CEF GYP
|
projects or that have not yet been merged into the source code versions of those
|
||||||
project generation step. The patch capability works as follows:
|
projects used by CEF. To address this situation the CEF project adds a patch
|
||||||
|
capability as part of cef_create_projects[.bat|sh] build step. This patch
|
||||||
|
capability works as follows:
|
||||||
|
|
||||||
1. The CEF developer creates one or more patch files containing all required
|
1. The CEF developer creates one or more patch files containing all required
|
||||||
changes to the Chromium/WebKit code base and places those patch files in the
|
code changes and places those patch files in the "patches" subdirectory.
|
||||||
"patches" subdirectory.
|
|
||||||
2. The CEF developer adds an entry for each patch file in the "patch.cfg" file.
|
2. The CEF developer adds an entry for each patch file in the "patch.cfg" file.
|
||||||
3. CEF applies the patches to the Chromium/WebKit source tree using the
|
3. When building CEF from source code the patch files are applied by the
|
||||||
patcher.py tool in the tools directory. If necessary the patcher.py tool
|
patcher.py tool via the cef_create_projects[.bat|sh] build step
|
||||||
also rewrites the "patch_state.h" file which defines the CEF_PATCHES_APPLIED
|
4. When updating Chromium the patch_updater.py tool is used to update all patch
|
||||||
preprocessor value.
|
files. See https://bitbucket.org/chromiumembedded/cef/wiki/ChromiumUpdate.md
|
||||||
|
for more information about the update process.
|
||||||
To disable automatic application of patches to the Chromium/WebKit code base
|
|
||||||
create an empty "NOPATCH" file in the "patch" directory. Sections of the CEF
|
|
||||||
code base that otherwise require patches will be disabled using the
|
|
||||||
CEF_PATCHES_APPLIED preprocessor value defined in the "patch_state.h" file. Be
|
|
||||||
warned that not applying all required patches may break important CEF
|
|
||||||
functionality.
|
|
||||||
|
|
|
@ -1,15 +1,24 @@
|
||||||
# Each map in the list associates a patch file name with a target path and
|
# Patch configuration file. See the README.txt file in the patch directory for
|
||||||
# optional condition. All paths in the patch file must be relative to the
|
# information on how this configuration is used.
|
||||||
# target path. Each map should include a comment linking to the code review
|
#
|
||||||
# or bug report that the patch relates to. If a condition is provided the
|
# Each dictionary entry in the "patches" map represents a single patch file.
|
||||||
# patch will only be applied if an environment variable with the specified
|
# Supported key/value pairs are as follows:
|
||||||
# name exists.
|
#
|
||||||
|
# - 'name' Required. The name of the patch file without the .patch
|
||||||
|
# extension that will be read from the patches subdirectory.
|
||||||
|
# - 'path' Optional. The repository root for the patch file. Defaults to
|
||||||
|
# the Chromium "src" root. All patch file contents must be
|
||||||
|
# relative to this repository root.
|
||||||
|
# - 'condition' Optional. The patch file will only be applied if an environment
|
||||||
|
# variable with this name exists.
|
||||||
|
#
|
||||||
|
# Each entry should also include a comment linking to the code review or bug
|
||||||
|
# report that the patch relates to.
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
{
|
{
|
||||||
# Necessary for grit integration.
|
# Necessary for grit integration.
|
||||||
'name': 'gritsettings',
|
'name': 'gritsettings',
|
||||||
'path': '../tools/gritsettings/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Necessary for GN integration.
|
# Necessary for GN integration.
|
||||||
|
@ -23,13 +32,11 @@ patches = [
|
||||||
# Write environment.* files with the correct SDK version on Windows.
|
# Write environment.* files with the correct SDK version on Windows.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=634788
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=634788
|
||||||
'name': 'gn_config',
|
'name': 'gn_config',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support loading of password protected zip archives.
|
# Support loading of password protected zip archives.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/496
|
# https://bitbucket.org/chromiumembedded/cef/issues/496
|
||||||
'name': 'zlib',
|
'name': 'zlib',
|
||||||
'path': '../third_party/zlib/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Avoid MessageLoop assertion on OS X.
|
# Avoid MessageLoop assertion on OS X.
|
||||||
|
@ -38,18 +45,15 @@ patches = [
|
||||||
# Revert change on Windows that removes MessageLoop::os_modal_loop().
|
# Revert change on Windows that removes MessageLoop::os_modal_loop().
|
||||||
# https://codereview.chromium.org/1992243003
|
# https://codereview.chromium.org/1992243003
|
||||||
'name': 'message_loop_443_1992243003',
|
'name': 'message_loop_443_1992243003',
|
||||||
'path': '../base/message_loop/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Enable popups in offscreen rendering on OS X.
|
# Enable popups in offscreen rendering on OS X.
|
||||||
'name': 'webkit_popups',
|
'name': 'webkit_popups',
|
||||||
'path': '../third_party/WebKit/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix export of UnderlayOpenGLHostingWindow for 64-bit OS X builds.
|
# Fix export of UnderlayOpenGLHostingWindow for 64-bit OS X builds.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1051
|
# https://bitbucket.org/chromiumembedded/cef/issues/1051
|
||||||
'name': 'underlay_1051',
|
'name': 'underlay_1051',
|
||||||
'path': '../ui/base/cocoa/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow specification of a parent window handle for Widget creation.
|
# Allow specification of a parent window handle for Widget creation.
|
||||||
|
@ -72,7 +76,6 @@ patches = [
|
||||||
# Remove console spam from RenderWidgetHostViewBase::IsInVR.
|
# Remove console spam from RenderWidgetHostViewBase::IsInVR.
|
||||||
# https://codereview.chromium.org/2822223002
|
# https://codereview.chromium.org/2822223002
|
||||||
'name': 'views_widget_180_1481_1565_1677_1749',
|
'name': 'views_widget_180_1481_1565_1677_1749',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow specification of a custom WebContentsView.
|
# Allow specification of a custom WebContentsView.
|
||||||
|
@ -81,58 +84,49 @@ patches = [
|
||||||
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
||||||
'name': 'web_contents_1257_1565',
|
'name': 'web_contents_1257_1565',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow creation of a custom SoftwareOutputDevice.
|
# Allow creation of a custom SoftwareOutputDevice.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1368
|
# https://bitbucket.org/chromiumembedded/cef/issues/1368
|
||||||
'name': 'compositor_1368',
|
'name': 'compositor_1368',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
# Support custom RenderWidgetHostViewOSR for BrowserPluginGuest.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
# https://bitbucket.org/chromiumembedded/cef/issues/1565
|
||||||
'name': 'browser_plugin_guest_1565',
|
'name': 'browser_plugin_guest_1565',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow customization of the WebView background color.
|
# Allow customization of the WebView background color.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1161
|
# https://bitbucket.org/chromiumembedded/cef/issues/1161
|
||||||
# https://codereview.chromium.org/228603007/
|
# https://codereview.chromium.org/228603007/
|
||||||
'name': 'prefs_content_1161',
|
'name': 'prefs_content_1161',
|
||||||
'path': '../content/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix drag&drop of combined text and URL data on Linux/Aura.
|
# Fix drag&drop of combined text and URL data on Linux/Aura.
|
||||||
# https://codereview.chromium.org/208313009
|
# https://codereview.chromium.org/208313009
|
||||||
'name': 'ui_dragdrop_355390',
|
'name': 'ui_dragdrop_355390',
|
||||||
'path': '../ui/base/dragdrop/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Windows: Fix AtExitManager assertion on *ServiceFactory destruction during
|
# Windows: Fix AtExitManager assertion on *ServiceFactory destruction during
|
||||||
# multi-threaded message loop shutdown.
|
# multi-threaded message loop shutdown.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1680
|
# https://bitbucket.org/chromiumembedded/cef/issues/1680
|
||||||
'name': 'service_factory_1680',
|
'name': 'service_factory_1680',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Make URLRequest::set_is_pending() public so that it can be called from
|
# Make URLRequest::set_is_pending() public so that it can be called from
|
||||||
# CefRequestInterceptor::MaybeInterceptResponse().
|
# CefRequestInterceptor::MaybeInterceptResponse().
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1327
|
# https://bitbucket.org/chromiumembedded/cef/issues/1327
|
||||||
'name': 'net_urlrequest_1327',
|
'name': 'net_urlrequest_1327',
|
||||||
'path': '../net/url_request/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Remove NOTREACHED() that is hit when loading Flash in incognito mode.
|
# Remove NOTREACHED() that is hit when loading Flash in incognito mode.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issue/1586
|
# https://bitbucket.org/chromiumembedded/cef/issue/1586
|
||||||
'name': 'content_pepper_flash_1586',
|
'name': 'content_pepper_flash_1586',
|
||||||
'path': '../content/browser/renderer_host/pepper/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix placement of IME window on Windows.
|
# Fix placement of IME window on Windows.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issue/1610
|
# https://bitbucket.org/chromiumembedded/cef/issue/1610
|
||||||
'name': 'ime_1610',
|
'name': 'ime_1610',
|
||||||
'path': '../ui/base/ime/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Enable support for print header and footer.
|
# Enable support for print header and footer.
|
||||||
|
@ -146,7 +140,6 @@ patches = [
|
||||||
#
|
#
|
||||||
# Add missing ENABLE_PRINT_PREVIEW checks in chrome/ on Mac.
|
# Add missing ENABLE_PRINT_PREVIEW checks in chrome/ on Mac.
|
||||||
'name': 'print_header_footer_1478_1565',
|
'name': 'print_header_footer_1478_1565',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Split service_manager::Main into the separate steps required by CEF.
|
# Split service_manager::Main into the separate steps required by CEF.
|
||||||
|
@ -155,52 +148,45 @@ patches = [
|
||||||
# Remove DCHECK on Linux when initialized CEF from a non-main thread.
|
# Remove DCHECK on Linux when initialized CEF from a non-main thread.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issue/1639
|
# https://bitbucket.org/chromiumembedded/cef/issue/1639
|
||||||
'name': 'service_manager_654986',
|
'name': 'service_manager_654986',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix rendering of the PDF extension with OSR when the device scale factor
|
# Fix rendering of the PDF extension with OSR when the device scale factor
|
||||||
# is not 1.
|
# is not 1.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1687
|
# https://bitbucket.org/chromiumembedded/cef/issues/1687
|
||||||
'name': 'browser_frame_host_guest_1687',
|
'name': 'browser_frame_host_guest_1687',
|
||||||
'path': '../content/browser/frame_host/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix loading of the PDF extension with proxy BrowserContext.
|
# Fix loading of the PDF extension with proxy BrowserContext.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1710
|
# https://bitbucket.org/chromiumembedded/cef/issues/1710
|
||||||
'name': 'supports_user_data_1710',
|
'name': 'supports_user_data_1710',
|
||||||
'path': '../base/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix background color on Mac.
|
# Fix background color on Mac.
|
||||||
# https://codereview.chromium.org/1070383005 (reverted)
|
# https://codereview.chromium.org/1070383005 (reverted)
|
||||||
'name': 'render_widget_host_1070383005',
|
'name': 'render_widget_host_1070383005',
|
||||||
'path': '../content/browser/renderer_host/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix missing check for defined(ENABLE_THEMES) in
|
# Fix missing check for defined(ENABLE_THEMES) in
|
||||||
# renderer_preferences_util.cc on Linux.
|
# renderer_preferences_util.cc on Linux.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=545103
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=545103
|
||||||
'name': 'renderer_preferences_util_545103',
|
'name': 'renderer_preferences_util_545103',
|
||||||
'path': '../chrome/browser/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Expose the FontFamilyCache UserData key.
|
# Expose the FontFamilyCache UserData key.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1501
|
# https://bitbucket.org/chromiumembedded/cef/issues/1501
|
||||||
'name': 'font_family_cache_1501',
|
'name': 'font_family_cache_1501',
|
||||||
'path': '../chrome/browser/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix crash while printing on Windows by properly initializing V8 in the PDF
|
# Fix crash while printing on Windows by properly initializing V8 in the PDF
|
||||||
# module.
|
# module.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=549365#c17
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=549365#c17
|
||||||
'name': 'pdfium_print_549365',
|
'name': 'pdfium_print_549365',
|
||||||
'path': '../third_party/pdfium/',
|
'path': 'third_party/pdfium/',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Enable support for filtering resource responses.
|
# Enable support for filtering resource responses.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/515
|
# https://bitbucket.org/chromiumembedded/cef/issues/515
|
||||||
'name': 'net_filter_515',
|
'name': 'net_filter_515',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Modify views::View to extend SupportsUserData.
|
# Modify views::View to extend SupportsUserData.
|
||||||
|
@ -219,29 +205,24 @@ patches = [
|
||||||
# Reverts label_button.h changes from
|
# Reverts label_button.h changes from
|
||||||
# https://codereview.chromium.org/2793283002
|
# https://codereview.chromium.org/2793283002
|
||||||
'name': 'views_1749',
|
'name': 'views_1749',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Expose RenderViewHostImpl swapped-out state.
|
# Expose RenderViewHostImpl swapped-out state.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1392
|
# https://bitbucket.org/chromiumembedded/cef/issues/1392
|
||||||
'name': 'render_view_host_impl_1392',
|
'name': 'render_view_host_impl_1392',
|
||||||
'path': '../content/browser/renderer_host/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Expose ui::Compositor via BrowserCompositorMac for OSR.
|
# Expose ui::Compositor via BrowserCompositorMac for OSR.
|
||||||
'name': 'browser_compositor_mac',
|
'name': 'browser_compositor_mac',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix chrome Widevine build on Linux.
|
# Fix chrome Widevine build on Linux.
|
||||||
'name': 'chrome_widevine',
|
'name': 'chrome_widevine',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Make some methods of ProfileManager virtual.
|
# Make some methods of ProfileManager virtual.
|
||||||
# Allow CEF to intercept GetBrowserContext*InIncognito functions.
|
# Allow CEF to intercept GetBrowserContext*InIncognito functions.
|
||||||
'name': 'chrome_profile',
|
'name': 'chrome_profile',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support StoragePartition proxy by:
|
# Support StoragePartition proxy by:
|
||||||
|
@ -258,13 +239,11 @@ patches = [
|
||||||
# initializing the channel from RPHI::ProcessDied.
|
# initializing the channel from RPHI::ProcessDied.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2096
|
# https://bitbucket.org/chromiumembedded/cef/issues/2096
|
||||||
'name': 'storage_partition_1973',
|
'name': 'storage_partition_1973',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix plugin placeholder blocked message.
|
# Fix plugin placeholder blocked message.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2020/
|
# https://bitbucket.org/chromiumembedded/cef/issues/2020/
|
||||||
'name': 'webview_plugin_2020',
|
'name': 'webview_plugin_2020',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support WebUI by:
|
# Support WebUI by:
|
||||||
|
@ -272,25 +251,21 @@ patches = [
|
||||||
# (b) Removing dependency on non-NULL IOThread* object.
|
# (b) Removing dependency on non-NULL IOThread* object.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2037
|
# https://bitbucket.org/chromiumembedded/cef/issues/2037
|
||||||
'name': 'webui_2037',
|
'name': 'webui_2037',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support an option to enable/disable net security expiration.
|
# Support an option to enable/disable net security expiration.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1994
|
# https://bitbucket.org/chromiumembedded/cef/issues/1994
|
||||||
'name': 'net_security_expiration_1994',
|
'name': 'net_security_expiration_1994',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Remove DCHECK hit during latency reporting when using OSR.
|
# Remove DCHECK hit during latency reporting when using OSR.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2060
|
# https://bitbucket.org/chromiumembedded/cef/issues/2060
|
||||||
'name': 'render_widget_latency_2060',
|
'name': 'render_widget_latency_2060',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Implement breakpad/crashpad customization required by CEF.
|
# Implement breakpad/crashpad customization required by CEF.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1995
|
# https://bitbucket.org/chromiumembedded/cef/issues/1995
|
||||||
'name': 'crashpad_1995',
|
'name': 'crashpad_1995',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Support customization of crash report pruning limits.
|
# Support customization of crash report pruning limits.
|
||||||
|
@ -299,13 +274,11 @@ patches = [
|
||||||
# Implement better rate-limiting/retry logic.
|
# Implement better rate-limiting/retry logic.
|
||||||
# https://bugs.chromium.org/p/crashpad/issues/detail?id=23
|
# https://bugs.chromium.org/p/crashpad/issues/detail?id=23
|
||||||
'name': 'crashpad_tp_1995',
|
'name': 'crashpad_tp_1995',
|
||||||
'path': '../third_party/crashpad/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Fix white flash during browser creation.
|
# Fix white flash during browser creation.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/1984
|
# https://bitbucket.org/chromiumembedded/cef/issues/1984
|
||||||
'name': 'rwh_background_color_1984',
|
'name': 'rwh_background_color_1984',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Allow continued use of ContentRendererClient::HandleNavigation.
|
# Allow continued use of ContentRendererClient::HandleNavigation.
|
||||||
|
@ -321,31 +294,26 @@ patches = [
|
||||||
# network error.
|
# network error.
|
||||||
# https://groups.google.com/a/chromium.org/d/msg/chromium-dev/6iAQPx_hwh8/gaTR5f1GAQAJ
|
# https://groups.google.com/a/chromium.org/d/msg/chromium-dev/6iAQPx_hwh8/gaTR5f1GAQAJ
|
||||||
'name': 'content_1129_2015',
|
'name': 'content_1129_2015',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Pass is_main_frame to PluginServiceFilter::IsPluginAvailable.
|
# Pass is_main_frame to PluginServiceFilter::IsPluginAvailable.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2015
|
# https://bitbucket.org/chromiumembedded/cef/issues/2015
|
||||||
'name': 'webkit_plugin_info_2015',
|
'name': 'webkit_plugin_info_2015',
|
||||||
'path': '../third_party/WebKit/',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Expose callbacks for mouse/keyboard events that trigger menu switching.
|
# Expose callbacks for mouse/keyboard events that trigger menu switching.
|
||||||
# Add accelerator display support to Label.
|
# Add accelerator display support to Label.
|
||||||
# https://bitbucket.org/chromiumembedded/cef/issues/2102
|
# https://bitbucket.org/chromiumembedded/cef/issues/2102
|
||||||
'name': 'views_menu_2102',
|
'name': 'views_menu_2102',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Mac: Fix build error when including openssl/opensslconf.h.
|
# Mac: Fix build error when including openssl/opensslconf.h.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=711670
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=711670
|
||||||
'name': 'mac_build_711670',
|
'name': 'mac_build_711670',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
# Linux: Remove DCHECK during GPU feature info detection.
|
# Linux: Remove DCHECK during GPU feature info detection.
|
||||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=699278
|
# https://bugs.chromium.org/p/chromium/issues/detail?id=699278
|
||||||
'name': 'gpu_feature_info_699278',
|
'name': 'gpu_feature_info_699278',
|
||||||
'path': '../',
|
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git render_widget_host_view_guest.cc render_widget_host_view_guest.cc
|
diff --git content/browser/frame_host/render_widget_host_view_guest.cc content/browser/frame_host/render_widget_host_view_guest.cc
|
||||||
index fc720a7..1c30365 100644
|
index fc720a7..1c30365 100644
|
||||||
--- render_widget_host_view_guest.cc
|
--- content/browser/frame_host/render_widget_host_view_guest.cc
|
||||||
+++ render_widget_host_view_guest.cc
|
+++ content/browser/frame_host/render_widget_host_view_guest.cc
|
||||||
@@ -247,13 +247,14 @@ void RenderWidgetHostViewGuest::Destroy() {
|
@@ -247,13 +247,14 @@ void RenderWidgetHostViewGuest::Destroy() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -303,7 +303,7 @@ index d237318..3701bd2 100644
|
||||||
content::WebContents* OpenURLFromTab(
|
content::WebContents* OpenURLFromTab(
|
||||||
content::WebContents* source,
|
content::WebContents* source,
|
||||||
diff --git extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h
|
diff --git extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h
|
||||||
index e065104d..ea3f547 100644
|
index e065104d..e67ae566e 100644
|
||||||
--- extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h
|
--- extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h
|
||||||
+++ extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h
|
+++ extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h
|
||||||
@@ -6,9 +6,9 @@
|
@@ -6,9 +6,9 @@
|
||||||
|
@ -317,11 +317,10 @@ index e065104d..ea3f547 100644
|
||||||
struct ContextMenuParams;
|
struct ContextMenuParams;
|
||||||
} // namespace content
|
} // namespace content
|
||||||
|
|
||||||
@@ -21,6 +21,14 @@ class MimeHandlerViewGuestDelegate {
|
@@ -22,6 +22,14 @@ class MimeHandlerViewGuestDelegate {
|
||||||
public:
|
|
||||||
MimeHandlerViewGuestDelegate() {}
|
MimeHandlerViewGuestDelegate() {}
|
||||||
virtual ~MimeHandlerViewGuestDelegate() {}
|
virtual ~MimeHandlerViewGuestDelegate() {}
|
||||||
+
|
|
||||||
+ // Provides an opportunity to supply a custom view implementation.
|
+ // Provides an opportunity to supply a custom view implementation.
|
||||||
+ virtual void OverrideWebContentsCreateParams(
|
+ virtual void OverrideWebContentsCreateParams(
|
||||||
+ content::WebContents::CreateParams* params) {}
|
+ content::WebContents::CreateParams* params) {}
|
||||||
|
@ -329,6 +328,7 @@ index e065104d..ea3f547 100644
|
||||||
+ // Called when a guest is attached or detached.
|
+ // Called when a guest is attached or detached.
|
||||||
+ virtual void OnGuestAttached(content::WebContentsView* parent_view) {}
|
+ virtual void OnGuestAttached(content::WebContentsView* parent_view) {}
|
||||||
+ virtual void OnGuestDetached(content::WebContentsView* parent_view) {}
|
+ virtual void OnGuestDetached(content::WebContentsView* parent_view) {}
|
||||||
|
+
|
||||||
// Handles context menu, or returns false if unhandled.
|
// Handles context menu, or returns false if unhandled.
|
||||||
virtual bool HandleContextMenu(content::WebContents* web_contents,
|
virtual bool HandleContextMenu(content::WebContents* web_contents,
|
||||||
|
const content::ContextMenuParams& params);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git pepper_flash_file_message_filter.cc pepper_flash_file_message_filter.cc
|
diff --git content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
|
||||||
index 6f03077..c61fed3 100644
|
index 6f03077..c61fed3 100644
|
||||||
--- pepper_flash_file_message_filter.cc
|
--- content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
|
||||||
+++ pepper_flash_file_message_filter.cc
|
+++ content/browser/renderer_host/pepper/pepper_flash_file_message_filter.cc
|
||||||
@@ -55,7 +55,7 @@ PepperFlashFileMessageFilter::PepperFlashFileMessageFilter(
|
@@ -55,7 +55,7 @@ PepperFlashFileMessageFilter::PepperFlashFileMessageFilter(
|
||||||
// will construct a bad path and could provide access to the wrong files.
|
// will construct a bad path and could provide access to the wrong files.
|
||||||
// In this case, |plugin_data_directory_| will remain unset and
|
// In this case, |plugin_data_directory_| will remain unset and
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git crashpad/client/prune_crash_reports.cc crashpad/client/prune_crash_reports.cc
|
diff --git third_party/crashpad/crashpad/client/prune_crash_reports.cc third_party/crashpad/crashpad/client/prune_crash_reports.cc
|
||||||
index 3aaaeee..d99fcb4 100644
|
index 3aaaeee..d99fcb4 100644
|
||||||
--- crashpad/client/prune_crash_reports.cc
|
--- third_party/crashpad/crashpad/client/prune_crash_reports.cc
|
||||||
+++ crashpad/client/prune_crash_reports.cc
|
+++ third_party/crashpad/crashpad/client/prune_crash_reports.cc
|
||||||
@@ -67,13 +67,19 @@ void PruneCrashReportDatabase(CrashReportDatabase* database,
|
@@ -67,13 +67,19 @@ void PruneCrashReportDatabase(CrashReportDatabase* database,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,10 +25,10 @@ index 3aaaeee..d99fcb4 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
static const time_t kSecondsInDay = 60 * 60 * 24;
|
static const time_t kSecondsInDay = 60 * 60 * 24;
|
||||||
diff --git crashpad/client/prune_crash_reports.h crashpad/client/prune_crash_reports.h
|
diff --git third_party/crashpad/crashpad/client/prune_crash_reports.h third_party/crashpad/crashpad/client/prune_crash_reports.h
|
||||||
index 6dac5f3..34f5ee1 100644
|
index 6dac5f3..34f5ee1 100644
|
||||||
--- crashpad/client/prune_crash_reports.h
|
--- third_party/crashpad/crashpad/client/prune_crash_reports.h
|
||||||
+++ crashpad/client/prune_crash_reports.h
|
+++ third_party/crashpad/crashpad/client/prune_crash_reports.h
|
||||||
@@ -57,7 +57,8 @@ class PruneCondition {
|
@@ -57,7 +57,8 @@ class PruneCondition {
|
||||||
//! of 128 MB.
|
//! of 128 MB.
|
||||||
//!
|
//!
|
||||||
|
@ -39,10 +39,10 @@ index 6dac5f3..34f5ee1 100644
|
||||||
|
|
||||||
virtual ~PruneCondition() {}
|
virtual ~PruneCondition() {}
|
||||||
|
|
||||||
diff --git crashpad/client/settings.cc crashpad/client/settings.cc
|
diff --git third_party/crashpad/crashpad/client/settings.cc third_party/crashpad/crashpad/client/settings.cc
|
||||||
index 15d16f2..5e8eadf 100644
|
index 15d16f2..5e8eadf 100644
|
||||||
--- crashpad/client/settings.cc
|
--- third_party/crashpad/crashpad/client/settings.cc
|
||||||
+++ crashpad/client/settings.cc
|
+++ third_party/crashpad/crashpad/client/settings.cc
|
||||||
@@ -38,7 +38,7 @@ void ScopedLockedFileHandleTraits::Free(FileHandle handle) {
|
@@ -38,7 +38,7 @@ void ScopedLockedFileHandleTraits::Free(FileHandle handle) {
|
||||||
|
|
||||||
struct Settings::Data {
|
struct Settings::Data {
|
||||||
|
@ -129,10 +129,10 @@ index 15d16f2..5e8eadf 100644
|
||||||
// static
|
// static
|
||||||
Settings::ScopedLockedFileHandle Settings::MakeScopedLockedFileHandle(
|
Settings::ScopedLockedFileHandle Settings::MakeScopedLockedFileHandle(
|
||||||
FileHandle file,
|
FileHandle file,
|
||||||
diff --git crashpad/client/settings.h crashpad/client/settings.h
|
diff --git third_party/crashpad/crashpad/client/settings.h third_party/crashpad/crashpad/client/settings.h
|
||||||
index b64f74f..0c3c22e 100644
|
index b64f74f..0c3c22e 100644
|
||||||
--- crashpad/client/settings.h
|
--- third_party/crashpad/crashpad/client/settings.h
|
||||||
+++ crashpad/client/settings.h
|
+++ third_party/crashpad/crashpad/client/settings.h
|
||||||
@@ -102,6 +102,11 @@ class Settings {
|
@@ -102,6 +102,11 @@ class Settings {
|
||||||
//! error logged.
|
//! error logged.
|
||||||
bool SetLastUploadAttemptTime(time_t time);
|
bool SetLastUploadAttemptTime(time_t time);
|
||||||
|
@ -145,10 +145,10 @@ index b64f74f..0c3c22e 100644
|
||||||
private:
|
private:
|
||||||
struct Data;
|
struct Data;
|
||||||
|
|
||||||
diff --git crashpad/handler/crash_report_upload_thread.h crashpad/handler/crash_report_upload_thread.h
|
diff --git third_party/crashpad/crashpad/handler/crash_report_upload_thread.h third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
||||||
index 14debac..c25c653 100644
|
index 14debac..c25c653 100644
|
||||||
--- crashpad/handler/crash_report_upload_thread.h
|
--- third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
||||||
+++ crashpad/handler/crash_report_upload_thread.h
|
+++ third_party/crashpad/crashpad/handler/crash_report_upload_thread.h
|
||||||
@@ -78,7 +78,7 @@ class CrashReportUploadThread : public WorkerThread::Delegate {
|
@@ -78,7 +78,7 @@ class CrashReportUploadThread : public WorkerThread::Delegate {
|
||||||
//! This method may be called from any thread.
|
//! This method may be called from any thread.
|
||||||
void ReportPending();
|
void ReportPending();
|
||||||
|
@ -176,10 +176,10 @@ index 14debac..c25c653 100644
|
||||||
|
|
||||||
//! \brief Attempts to upload a crash report.
|
//! \brief Attempts to upload a crash report.
|
||||||
//!
|
//!
|
||||||
diff --git crashpad/handler/handler_main.cc crashpad/handler/handler_main.cc
|
diff --git third_party/crashpad/crashpad/handler/handler_main.cc third_party/crashpad/crashpad/handler/handler_main.cc
|
||||||
index 641bf0f..3a86eb3 100644
|
index 641bf0f..3a86eb3 100644
|
||||||
--- crashpad/handler/handler_main.cc
|
--- third_party/crashpad/crashpad/handler/handler_main.cc
|
||||||
+++ crashpad/handler/handler_main.cc
|
+++ third_party/crashpad/crashpad/handler/handler_main.cc
|
||||||
@@ -35,8 +35,10 @@
|
@@ -35,8 +35,10 @@
|
||||||
#include "base/metrics/persistent_histogram_allocator.h"
|
#include "base/metrics/persistent_histogram_allocator.h"
|
||||||
#include "base/scoped_generic.h"
|
#include "base/scoped_generic.h"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git font_family_cache.h font_family_cache.h
|
diff --git chrome/browser/font_family_cache.h chrome/browser/font_family_cache.h
|
||||||
index 743448d..0a9f350 100644
|
index 743448d..0a9f350 100644
|
||||||
--- font_family_cache.h
|
--- chrome/browser/font_family_cache.h
|
||||||
+++ font_family_cache.h
|
+++ chrome/browser/font_family_cache.h
|
||||||
@@ -20,6 +20,8 @@ class Profile;
|
@@ -20,6 +20,8 @@ class Profile;
|
||||||
|
|
||||||
FORWARD_DECLARE_TEST(FontFamilyCacheTest, Caching);
|
FORWARD_DECLARE_TEST(FontFamilyCacheTest, Caching);
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
diff --git resource_ids resource_ids
|
diff --git tools/gritsettings/resource_ids tools/gritsettings/resource_ids
|
||||||
index 4e3fd2d..447c1f5 100644
|
index 4e3fd2d..2cf62da 100644
|
||||||
--- resource_ids
|
--- tools/gritsettings/resource_ids
|
||||||
+++ resource_ids
|
+++ tools/gritsettings/resource_ids
|
||||||
@@ -361,5 +361,12 @@
|
@@ -362,4 +362,11 @@
|
||||||
# Thinking about appending to the end?
|
|
||||||
# Please read the header and find the right section above instead.
|
# Please read the header and find the right section above instead.
|
||||||
|
|
||||||
|
# Resource ids starting at 31000 are reserved for projects built on Chromium.
|
||||||
|
+
|
||||||
+ "cef/libcef/resources/cef_resources.grd": {
|
+ "cef/libcef/resources/cef_resources.grd": {
|
||||||
+ "includes": [31500],
|
+ "includes": [31500],
|
||||||
+ },
|
+ },
|
||||||
+ "cef/libcef/resources/cef_strings.grd": {
|
+ "cef/libcef/resources/cef_strings.grd": {
|
||||||
+ "messages": [32000],
|
+ "messages": [32000],
|
||||||
+ },
|
+ },
|
||||||
+
|
|
||||||
# Resource ids starting at 31000 are reserved for projects built on Chromium.
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git input_method_win.cc input_method_win.cc
|
diff --git ui/base/ime/input_method_win.cc ui/base/ime/input_method_win.cc
|
||||||
index e2bb528..3e851e5 100644
|
index e2bb528..3e851e5 100644
|
||||||
--- input_method_win.cc
|
--- ui/base/ime/input_method_win.cc
|
||||||
+++ input_method_win.cc
|
+++ ui/base/ime/input_method_win.cc
|
||||||
@@ -682,8 +682,9 @@ bool InputMethodWin::IsWindowFocused(const TextInputClient* client) const {
|
@@ -682,8 +682,9 @@ bool InputMethodWin::IsWindowFocused(const TextInputClient* client) const {
|
||||||
// receiving keyboard input as long as it is an active window. This works well
|
// receiving keyboard input as long as it is an active window. This works well
|
||||||
// even when the |attached_window_handle| becomes active but has not received
|
// even when the |attached_window_handle| becomes active but has not received
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git message_loop.cc message_loop.cc
|
diff --git base/message_loop/message_loop.cc base/message_loop/message_loop.cc
|
||||||
index 3d55920..721aca1 100644
|
index 3d55920..721aca1 100644
|
||||||
--- message_loop.cc
|
--- base/message_loop/message_loop.cc
|
||||||
+++ message_loop.cc
|
+++ base/message_loop/message_loop.cc
|
||||||
@@ -96,12 +96,6 @@ MessageLoop::~MessageLoop() {
|
@@ -96,12 +96,6 @@ MessageLoop::~MessageLoop() {
|
||||||
// may be current.
|
// may be current.
|
||||||
DCHECK((pump_ && current() == this) || (!pump_ && current() != this));
|
DCHECK((pump_ && current() == this) || (!pump_ && current() != this));
|
||||||
|
@ -25,10 +25,10 @@ index 3d55920..721aca1 100644
|
||||||
pump_factory_(pump_factory),
|
pump_factory_(pump_factory),
|
||||||
run_loop_(nullptr),
|
run_loop_(nullptr),
|
||||||
current_pending_task_(nullptr),
|
current_pending_task_(nullptr),
|
||||||
diff --git message_loop.h message_loop.h
|
diff --git base/message_loop/message_loop.h base/message_loop/message_loop.h
|
||||||
index 2ef4537..9c657f8 100644
|
index 2ef4537..9c657f8 100644
|
||||||
--- message_loop.h
|
--- base/message_loop/message_loop.h
|
||||||
+++ message_loop.h
|
+++ base/message_loop/message_loop.h
|
||||||
@@ -303,6 +303,16 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
@@ -303,6 +303,16 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
|
||||||
void AddTaskObserver(TaskObserver* task_observer);
|
void AddTaskObserver(TaskObserver* task_observer);
|
||||||
void RemoveTaskObserver(TaskObserver* task_observer);
|
void RemoveTaskObserver(TaskObserver* task_observer);
|
||||||
|
@ -59,10 +59,10 @@ index 2ef4537..9c657f8 100644
|
||||||
// pump_factory_.Run() is called to create a message pump for this loop
|
// pump_factory_.Run() is called to create a message pump for this loop
|
||||||
// if type_ is TYPE_CUSTOM and pump_ is null.
|
// if type_ is TYPE_CUSTOM and pump_ is null.
|
||||||
MessagePumpFactoryCallback pump_factory_;
|
MessagePumpFactoryCallback pump_factory_;
|
||||||
diff --git message_pump_win.cc message_pump_win.cc
|
diff --git base/message_loop/message_pump_win.cc base/message_loop/message_pump_win.cc
|
||||||
index d52c785..a43b5b3 100644
|
index d52c785..a43b5b3 100644
|
||||||
--- message_pump_win.cc
|
--- base/message_loop/message_pump_win.cc
|
||||||
+++ message_pump_win.cc
|
+++ base/message_loop/message_pump_win.cc
|
||||||
@@ -366,20 +366,28 @@ bool MessagePumpForUI::ProcessMessageHelper(const MSG& msg) {
|
@@ -366,20 +366,28 @@ bool MessagePumpForUI::ProcessMessageHelper(const MSG& msg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git url_request.h url_request.h
|
diff --git net/url_request/url_request.h net/url_request/url_request.h
|
||||||
index e1406f3..ed9aa91 100644
|
index e1406f3..ed9aa91 100644
|
||||||
--- url_request.h
|
--- net/url_request/url_request.h
|
||||||
+++ url_request.h
|
+++ net/url_request/url_request.h
|
||||||
@@ -651,10 +651,11 @@ class NET_EXPORT URLRequest : NON_EXPORTED_BASE(public base::NonThreadSafe),
|
@@ -651,10 +651,11 @@ class NET_EXPORT URLRequest : NON_EXPORTED_BASE(public base::NonThreadSafe),
|
||||||
// Returns the error status of the request.
|
// Returns the error status of the request.
|
||||||
// Do not use! Going to be protected!
|
// Do not use! Going to be protected!
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git public/common/common_param_traits_macros.h public/common/common_param_traits_macros.h
|
diff --git content/public/common/common_param_traits_macros.h content/public/common/common_param_traits_macros.h
|
||||||
index 3dd2e75..9f61aad 100644
|
index 3dd2e75..9f61aad 100644
|
||||||
--- public/common/common_param_traits_macros.h
|
--- content/public/common/common_param_traits_macros.h
|
||||||
+++ public/common/common_param_traits_macros.h
|
+++ content/public/common/common_param_traits_macros.h
|
||||||
@@ -201,6 +201,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::WebPreferences)
|
@@ -201,6 +201,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::WebPreferences)
|
||||||
IPC_STRUCT_TRAITS_MEMBER(main_frame_resizes_are_orientation_changes)
|
IPC_STRUCT_TRAITS_MEMBER(main_frame_resizes_are_orientation_changes)
|
||||||
IPC_STRUCT_TRAITS_MEMBER(initialize_at_minimum_page_scale)
|
IPC_STRUCT_TRAITS_MEMBER(initialize_at_minimum_page_scale)
|
||||||
|
@ -10,10 +10,10 @@ index 3dd2e75..9f61aad 100644
|
||||||
IPC_STRUCT_TRAITS_MEMBER(cookie_enabled)
|
IPC_STRUCT_TRAITS_MEMBER(cookie_enabled)
|
||||||
IPC_STRUCT_TRAITS_MEMBER(navigate_on_drag_drop)
|
IPC_STRUCT_TRAITS_MEMBER(navigate_on_drag_drop)
|
||||||
IPC_STRUCT_TRAITS_MEMBER(spatial_navigation_enabled)
|
IPC_STRUCT_TRAITS_MEMBER(spatial_navigation_enabled)
|
||||||
diff --git public/common/web_preferences.cc public/common/web_preferences.cc
|
diff --git content/public/common/web_preferences.cc content/public/common/web_preferences.cc
|
||||||
index 72f7bd8..850e591 100644
|
index 72f7bd8..850e591 100644
|
||||||
--- public/common/web_preferences.cc
|
--- content/public/common/web_preferences.cc
|
||||||
+++ public/common/web_preferences.cc
|
+++ content/public/common/web_preferences.cc
|
||||||
@@ -172,6 +172,7 @@ WebPreferences::WebPreferences()
|
@@ -172,6 +172,7 @@ WebPreferences::WebPreferences()
|
||||||
spatial_navigation_enabled(false),
|
spatial_navigation_enabled(false),
|
||||||
use_solid_color_scrollbars(false),
|
use_solid_color_scrollbars(false),
|
||||||
|
@ -22,10 +22,10 @@ index 72f7bd8..850e591 100644
|
||||||
v8_cache_options(V8_CACHE_OPTIONS_DEFAULT),
|
v8_cache_options(V8_CACHE_OPTIONS_DEFAULT),
|
||||||
inert_visual_viewport(false),
|
inert_visual_viewport(false),
|
||||||
record_whole_document(false),
|
record_whole_document(false),
|
||||||
diff --git public/common/web_preferences.h public/common/web_preferences.h
|
diff --git content/public/common/web_preferences.h content/public/common/web_preferences.h
|
||||||
index ae9756c..d0f2f1b 100644
|
index ae9756c..d0f2f1b 100644
|
||||||
--- public/common/web_preferences.h
|
--- content/public/common/web_preferences.h
|
||||||
+++ public/common/web_preferences.h
|
+++ content/public/common/web_preferences.h
|
||||||
@@ -184,6 +184,7 @@ struct CONTENT_EXPORT WebPreferences {
|
@@ -184,6 +184,7 @@ struct CONTENT_EXPORT WebPreferences {
|
||||||
bool spatial_navigation_enabled;
|
bool spatial_navigation_enabled;
|
||||||
bool use_solid_color_scrollbars;
|
bool use_solid_color_scrollbars;
|
||||||
|
@ -34,10 +34,10 @@ index ae9756c..d0f2f1b 100644
|
||||||
V8CacheOptions v8_cache_options;
|
V8CacheOptions v8_cache_options;
|
||||||
bool inert_visual_viewport;
|
bool inert_visual_viewport;
|
||||||
bool record_whole_document;
|
bool record_whole_document;
|
||||||
diff --git renderer/render_view_impl.cc renderer/render_view_impl.cc
|
diff --git content/renderer/render_view_impl.cc content/renderer/render_view_impl.cc
|
||||||
index 7d6113c..d600026 100644
|
index 7d6113c..d600026 100644
|
||||||
--- renderer/render_view_impl.cc
|
--- content/renderer/render_view_impl.cc
|
||||||
+++ renderer/render_view_impl.cc
|
+++ content/renderer/render_view_impl.cc
|
||||||
@@ -1383,6 +1383,8 @@ void RenderViewImpl::ApplyWebPreferencesInternal(
|
@@ -1383,6 +1383,8 @@ void RenderViewImpl::ApplyWebPreferencesInternal(
|
||||||
blink::WebView* web_view,
|
blink::WebView* web_view,
|
||||||
CompositorDependencies* compositor_deps) {
|
CompositorDependencies* compositor_deps) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git render_view_host_impl.h render_view_host_impl.h
|
diff --git content/browser/renderer_host/render_view_host_impl.h content/browser/renderer_host/render_view_host_impl.h
|
||||||
index bcc702b..3753c50 100644
|
index bcc702b..3753c50 100644
|
||||||
--- render_view_host_impl.h
|
--- content/browser/renderer_host/render_view_host_impl.h
|
||||||
+++ render_view_host_impl.h
|
+++ content/browser/renderer_host/render_view_host_impl.h
|
||||||
@@ -154,6 +154,7 @@ class CONTENT_EXPORT RenderViewHostImpl : public RenderViewHost,
|
@@ -154,6 +154,7 @@ class CONTENT_EXPORT RenderViewHostImpl : public RenderViewHost,
|
||||||
void set_is_swapped_out(bool is_swapped_out) {
|
void set_is_swapped_out(bool is_swapped_out) {
|
||||||
is_swapped_out_ = is_swapped_out;
|
is_swapped_out_ = is_swapped_out;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git render_widget_host_view_mac.mm render_widget_host_view_mac.mm
|
diff --git content/browser/renderer_host/render_widget_host_view_mac.mm content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||||
index 896170a..4beadf9 100644
|
index 896170a..4beadf9 100644
|
||||||
--- render_widget_host_view_mac.mm
|
--- content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||||
+++ render_widget_host_view_mac.mm
|
+++ content/browser/renderer_host/render_widget_host_view_mac.mm
|
||||||
@@ -453,9 +453,6 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
|
@@ -453,9 +453,6 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
|
||||||
// Paint this view host with |background_color_| when there is no content
|
// Paint this view host with |background_color_| when there is no content
|
||||||
// ready to draw.
|
// ready to draw.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git renderer_preferences_util.cc renderer_preferences_util.cc
|
diff --git chrome/browser/renderer_preferences_util.cc chrome/browser/renderer_preferences_util.cc
|
||||||
index 7296a04..c702d31 100644
|
index 7296a04..c702d31 100644
|
||||||
--- renderer_preferences_util.cc
|
--- chrome/browser/renderer_preferences_util.cc
|
||||||
+++ renderer_preferences_util.cc
|
+++ chrome/browser/renderer_preferences_util.cc
|
||||||
@@ -32,7 +32,8 @@
|
@@ -32,7 +32,8 @@
|
||||||
#include "ui/base/cocoa/defaults_utils.h"
|
#include "ui/base/cocoa/defaults_utils.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git supports_user_data.h supports_user_data.h
|
diff --git base/supports_user_data.h base/supports_user_data.h
|
||||||
index 233ce38..02e690b 100644
|
index 233ce38..02e690b 100644
|
||||||
--- supports_user_data.h
|
--- base/supports_user_data.h
|
||||||
+++ supports_user_data.h
|
+++ base/supports_user_data.h
|
||||||
@@ -39,10 +39,10 @@ class BASE_EXPORT SupportsUserData {
|
@@ -39,10 +39,10 @@ class BASE_EXPORT SupportsUserData {
|
||||||
// delete the object if it is changed or the object is destroyed.
|
// delete the object if it is changed or the object is destroyed.
|
||||||
// TODO: remove the raw ptr version of SetUserData once everything uses
|
// TODO: remove the raw ptr version of SetUserData once everything uses
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git os_exchange_data_provider_aurax11.cc os_exchange_data_provider_aurax11.cc
|
diff --git ui/base/dragdrop/os_exchange_data_provider_aurax11.cc ui/base/dragdrop/os_exchange_data_provider_aurax11.cc
|
||||||
index 9b93593..fe0f44a 100644
|
index 9b93593..fe0f44a 100644
|
||||||
--- os_exchange_data_provider_aurax11.cc
|
--- ui/base/dragdrop/os_exchange_data_provider_aurax11.cc
|
||||||
+++ os_exchange_data_provider_aurax11.cc
|
+++ ui/base/dragdrop/os_exchange_data_provider_aurax11.cc
|
||||||
@@ -162,7 +162,8 @@ void OSExchangeDataProviderAuraX11::SetURL(const GURL& url,
|
@@ -162,7 +162,8 @@ void OSExchangeDataProviderAuraX11::SetURL(const GURL& url,
|
||||||
mem);
|
mem);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git underlay_opengl_hosting_window.h underlay_opengl_hosting_window.h
|
diff --git ui/base/cocoa/underlay_opengl_hosting_window.h ui/base/cocoa/underlay_opengl_hosting_window.h
|
||||||
index d673c31..806d134 100644
|
index d673c31..806d134 100644
|
||||||
--- underlay_opengl_hosting_window.h
|
--- ui/base/cocoa/underlay_opengl_hosting_window.h
|
||||||
+++ underlay_opengl_hosting_window.h
|
+++ ui/base/cocoa/underlay_opengl_hosting_window.h
|
||||||
@@ -12,7 +12,7 @@
|
@@ -12,7 +12,7 @@
|
||||||
// Common base class for windows that host a OpenGL surface that renders under
|
// Common base class for windows that host a OpenGL surface that renders under
|
||||||
// the window. Previously contained methods related to hole punching, now just
|
// the window. Previously contained methods related to hole punching, now just
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git Source/core/dom/DOMImplementation.cpp Source/core/dom/DOMImplementation.cpp
|
diff --git third_party/WebKit/Source/core/dom/DOMImplementation.cpp third_party/WebKit/Source/core/dom/DOMImplementation.cpp
|
||||||
index 8aab9bb..e3286f6 100644
|
index 8aab9bb..e3286f6 100644
|
||||||
--- Source/core/dom/DOMImplementation.cpp
|
--- third_party/WebKit/Source/core/dom/DOMImplementation.cpp
|
||||||
+++ Source/core/dom/DOMImplementation.cpp
|
+++ third_party/WebKit/Source/core/dom/DOMImplementation.cpp
|
||||||
@@ -241,10 +241,11 @@ Document* DOMImplementation::createDocument(const String& type,
|
@@ -241,10 +241,11 @@ Document* DOMImplementation::createDocument(const String& type,
|
||||||
// For that reason, the origin must be retrieved directly from init.url().
|
// For that reason, the origin must be retrieved directly from init.url().
|
||||||
if (init.GetFrame()->IsMainFrame()) {
|
if (init.GetFrame()->IsMainFrame()) {
|
||||||
|
@ -16,10 +16,10 @@ index 8aab9bb..e3286f6 100644
|
||||||
->Tree()
|
->Tree()
|
||||||
.Top()
|
.Top()
|
||||||
->GetSecurityContext()
|
->GetSecurityContext()
|
||||||
diff --git Source/core/frame/LocalFrame.cpp Source/core/frame/LocalFrame.cpp
|
diff --git third_party/WebKit/Source/core/frame/LocalFrame.cpp third_party/WebKit/Source/core/frame/LocalFrame.cpp
|
||||||
index b64d75d..869b45d 100644
|
index b64d75d..869b45d 100644
|
||||||
--- Source/core/frame/LocalFrame.cpp
|
--- third_party/WebKit/Source/core/frame/LocalFrame.cpp
|
||||||
+++ Source/core/frame/LocalFrame.cpp
|
+++ third_party/WebKit/Source/core/frame/LocalFrame.cpp
|
||||||
@@ -927,7 +927,7 @@ ContentSettingsClient* LocalFrame::GetContentSettingsClient() {
|
@@ -927,7 +927,7 @@ ContentSettingsClient* LocalFrame::GetContentSettingsClient() {
|
||||||
PluginData* LocalFrame::GetPluginData() const {
|
PluginData* LocalFrame::GetPluginData() const {
|
||||||
if (!Loader().AllowPlugins(kNotAboutToInstantiatePlugin))
|
if (!Loader().AllowPlugins(kNotAboutToInstantiatePlugin))
|
||||||
|
@ -29,10 +29,10 @@ index b64d75d..869b45d 100644
|
||||||
Tree().Top()->GetSecurityContext()->GetSecurityOrigin());
|
Tree().Top()->GetSecurityContext()->GetSecurityOrigin());
|
||||||
}
|
}
|
||||||
|
|
||||||
diff --git Source/core/page/Page.cpp Source/core/page/Page.cpp
|
diff --git third_party/WebKit/Source/core/page/Page.cpp third_party/WebKit/Source/core/page/Page.cpp
|
||||||
index 941a30c..2c5764c 100644
|
index 941a30c..2c5764c 100644
|
||||||
--- Source/core/page/Page.cpp
|
--- third_party/WebKit/Source/core/page/Page.cpp
|
||||||
+++ Source/core/page/Page.cpp
|
+++ third_party/WebKit/Source/core/page/Page.cpp
|
||||||
@@ -289,16 +289,30 @@ void Page::RefreshPlugins() {
|
@@ -289,16 +289,30 @@ void Page::RefreshPlugins() {
|
||||||
|
|
||||||
for (const Page* page : AllPages()) {
|
for (const Page* page : AllPages()) {
|
||||||
|
@ -71,10 +71,10 @@ index 941a30c..2c5764c 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
void Page::SetValidationMessageClient(ValidationMessageClient* client) {
|
void Page::SetValidationMessageClient(ValidationMessageClient* client) {
|
||||||
diff --git Source/core/page/Page.h Source/core/page/Page.h
|
diff --git third_party/WebKit/Source/core/page/Page.h third_party/WebKit/Source/core/page/Page.h
|
||||||
index e644faa..2fe0d37 100644
|
index e644faa..2fe0d37 100644
|
||||||
--- Source/core/page/Page.h
|
--- third_party/WebKit/Source/core/page/Page.h
|
||||||
+++ Source/core/page/Page.h
|
+++ third_party/WebKit/Source/core/page/Page.h
|
||||||
@@ -132,7 +132,8 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>,
|
@@ -132,7 +132,8 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>,
|
||||||
ViewportDescription GetViewportDescription() const;
|
ViewportDescription GetViewportDescription() const;
|
||||||
|
|
||||||
|
@ -95,10 +95,10 @@ index e644faa..2fe0d37 100644
|
||||||
|
|
||||||
EditorClient* const editor_client_;
|
EditorClient* const editor_client_;
|
||||||
SpellCheckerClient* const spell_checker_client_;
|
SpellCheckerClient* const spell_checker_client_;
|
||||||
diff --git Source/platform/plugins/PluginData.cpp Source/platform/plugins/PluginData.cpp
|
diff --git third_party/WebKit/Source/platform/plugins/PluginData.cpp third_party/WebKit/Source/platform/plugins/PluginData.cpp
|
||||||
index 03618f6..5ac59e8 100644
|
index 03618f6..5ac59e8 100644
|
||||||
--- Source/platform/plugins/PluginData.cpp
|
--- third_party/WebKit/Source/platform/plugins/PluginData.cpp
|
||||||
+++ Source/platform/plugins/PluginData.cpp
|
+++ third_party/WebKit/Source/platform/plugins/PluginData.cpp
|
||||||
@@ -30,11 +30,12 @@
|
@@ -30,11 +30,12 @@
|
||||||
|
|
||||||
namespace blink {
|
namespace blink {
|
||||||
|
@ -125,10 +125,10 @@ index 03618f6..5ac59e8 100644
|
||||||
&builder);
|
&builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
diff --git Source/platform/plugins/PluginData.h Source/platform/plugins/PluginData.h
|
diff --git third_party/WebKit/Source/platform/plugins/PluginData.h third_party/WebKit/Source/platform/plugins/PluginData.h
|
||||||
index cdf3381..671f17c 100644
|
index cdf3381..671f17c 100644
|
||||||
--- Source/platform/plugins/PluginData.h
|
--- third_party/WebKit/Source/platform/plugins/PluginData.h
|
||||||
+++ Source/platform/plugins/PluginData.h
|
+++ third_party/WebKit/Source/platform/plugins/PluginData.h
|
||||||
@@ -52,8 +52,9 @@ class PLATFORM_EXPORT PluginData : public RefCounted<PluginData> {
|
@@ -52,8 +52,9 @@ class PLATFORM_EXPORT PluginData : public RefCounted<PluginData> {
|
||||||
WTF_MAKE_NONCOPYABLE(PluginData);
|
WTF_MAKE_NONCOPYABLE(PluginData);
|
||||||
|
|
||||||
|
@ -156,10 +156,10 @@ index cdf3381..671f17c 100644
|
||||||
RefPtr<SecurityOrigin> main_frame_origin_;
|
RefPtr<SecurityOrigin> main_frame_origin_;
|
||||||
};
|
};
|
||||||
|
|
||||||
diff --git public/platform/Platform.h public/platform/Platform.h
|
diff --git third_party/WebKit/public/platform/Platform.h third_party/WebKit/public/platform/Platform.h
|
||||||
index eab1ca5..6657878 100644
|
index eab1ca5..6657878 100644
|
||||||
--- public/platform/Platform.h
|
--- third_party/WebKit/public/platform/Platform.h
|
||||||
+++ public/platform/Platform.h
|
+++ third_party/WebKit/public/platform/Platform.h
|
||||||
@@ -365,6 +365,7 @@ class BLINK_PLATFORM_EXPORT Platform {
|
@@ -365,6 +365,7 @@ class BLINK_PLATFORM_EXPORT Platform {
|
||||||
// satisfy this call. mainFrameOrigin is used by the browser process to
|
// satisfy this call. mainFrameOrigin is used by the browser process to
|
||||||
// filter plugins from the plugin list based on content settings.
|
// filter plugins from the plugin list based on content settings.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git Source/web/ChromeClientImpl.cpp Source/web/ChromeClientImpl.cpp
|
diff --git third_party/WebKit/Source/web/ChromeClientImpl.cpp third_party/WebKit/Source/web/ChromeClientImpl.cpp
|
||||||
index ba81ee3..648d7ce 100644
|
index ba81ee3..648d7ce 100644
|
||||||
--- Source/web/ChromeClientImpl.cpp
|
--- third_party/WebKit/Source/web/ChromeClientImpl.cpp
|
||||||
+++ Source/web/ChromeClientImpl.cpp
|
+++ third_party/WebKit/Source/web/ChromeClientImpl.cpp
|
||||||
@@ -908,7 +908,7 @@ bool ChromeClientImpl::HasOpenedPopup() const {
|
@@ -908,7 +908,7 @@ bool ChromeClientImpl::HasOpenedPopup() const {
|
||||||
PopupMenu* ChromeClientImpl::OpenPopupMenu(LocalFrame& frame,
|
PopupMenu* ChromeClientImpl::OpenPopupMenu(LocalFrame& frame,
|
||||||
HTMLSelectElement& select) {
|
HTMLSelectElement& select) {
|
||||||
|
@ -11,10 +11,10 @@ index ba81ee3..648d7ce 100644
|
||||||
return new ExternalPopupMenu(frame, select, *web_view_);
|
return new ExternalPopupMenu(frame, select, *web_view_);
|
||||||
|
|
||||||
DCHECK(RuntimeEnabledFeatures::pagePopupEnabled());
|
DCHECK(RuntimeEnabledFeatures::pagePopupEnabled());
|
||||||
diff --git Source/web/WebViewImpl.cpp Source/web/WebViewImpl.cpp
|
diff --git third_party/WebKit/Source/web/WebViewImpl.cpp third_party/WebKit/Source/web/WebViewImpl.cpp
|
||||||
index 16ac66b..7053b54 100644
|
index 16ac66b..7053b54 100644
|
||||||
--- Source/web/WebViewImpl.cpp
|
--- third_party/WebKit/Source/web/WebViewImpl.cpp
|
||||||
+++ Source/web/WebViewImpl.cpp
|
+++ third_party/WebKit/Source/web/WebViewImpl.cpp
|
||||||
@@ -355,6 +355,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client,
|
@@ -355,6 +355,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client,
|
||||||
enable_fake_page_scale_animation_for_testing_(false),
|
enable_fake_page_scale_animation_for_testing_(false),
|
||||||
fake_page_scale_animation_page_scale_factor_(0),
|
fake_page_scale_animation_page_scale_factor_(0),
|
||||||
|
@ -38,10 +38,10 @@ index 16ac66b..7053b54 100644
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebViewImpl::SetBackgroundColorOverride(WebColor color) {
|
void WebViewImpl::SetBackgroundColorOverride(WebColor color) {
|
||||||
diff --git Source/web/WebViewImpl.h Source/web/WebViewImpl.h
|
diff --git third_party/WebKit/Source/web/WebViewImpl.h third_party/WebKit/Source/web/WebViewImpl.h
|
||||||
index a22ef37..33dbab4 100644
|
index a22ef37..33dbab4 100644
|
||||||
--- Source/web/WebViewImpl.h
|
--- third_party/WebKit/Source/web/WebViewImpl.h
|
||||||
+++ Source/web/WebViewImpl.h
|
+++ third_party/WebKit/Source/web/WebViewImpl.h
|
||||||
@@ -362,7 +362,8 @@ class WEB_EXPORT WebViewImpl final
|
@@ -362,7 +362,8 @@ class WEB_EXPORT WebViewImpl final
|
||||||
|
|
||||||
// Returns true if popup menus should be rendered by the browser, false if
|
// Returns true if popup menus should be rendered by the browser, false if
|
||||||
|
@ -61,10 +61,10 @@ index a22ef37..33dbab4 100644
|
||||||
float compositor_device_scale_factor_override_;
|
float compositor_device_scale_factor_override_;
|
||||||
TransformationMatrix device_emulation_transform_;
|
TransformationMatrix device_emulation_transform_;
|
||||||
|
|
||||||
diff --git public/web/WebView.h public/web/WebView.h
|
diff --git third_party/WebKit/public/web/WebView.h third_party/WebKit/public/web/WebView.h
|
||||||
index e811392..d6d5bf8 100644
|
index e811392..d6d5bf8 100644
|
||||||
--- public/web/WebView.h
|
--- third_party/WebKit/public/web/WebView.h
|
||||||
+++ public/web/WebView.h
|
+++ third_party/WebKit/public/web/WebView.h
|
||||||
@@ -403,6 +403,7 @@ class WebView : protected WebWidget {
|
@@ -403,6 +403,7 @@ class WebView : protected WebWidget {
|
||||||
|
|
||||||
// Sets whether select popup menus should be rendered by the browser.
|
// Sets whether select popup menus should be rendered by the browser.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
diff --git contrib/minizip/unzip.c contrib/minizip/unzip.c
|
diff --git third_party/zlib/contrib/minizip/unzip.c third_party/zlib/contrib/minizip/unzip.c
|
||||||
index 199b472..be42478 100644
|
index 199b472..be42478 100644
|
||||||
--- contrib/minizip/unzip.c
|
--- third_party/zlib/contrib/minizip/unzip.c
|
||||||
+++ contrib/minizip/unzip.c
|
+++ third_party/zlib/contrib/minizip/unzip.c
|
||||||
@@ -69,7 +69,7 @@
|
@@ -69,7 +69,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
|
@ -5,21 +5,20 @@
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
def exec_cmd(cmd, path, input_file=None):
|
def exec_cmd(cmd, path, input_string=None):
|
||||||
""" Execute the specified command and return the result. """
|
""" Execute the specified command and return the result. """
|
||||||
out = ''
|
out = ''
|
||||||
err = ''
|
err = ''
|
||||||
parts = cmd.split()
|
parts = cmd.split()
|
||||||
try:
|
try:
|
||||||
if not input_file:
|
if input_string is None:
|
||||||
process = Popen(parts, cwd=path, stdout=PIPE, stderr=PIPE,
|
process = Popen(parts, cwd=path, stdout=PIPE, stderr=PIPE,
|
||||||
shell=(sys.platform == 'win32'))
|
shell=(sys.platform == 'win32'))
|
||||||
else:
|
|
||||||
with open(input_file, 'rb') as f:
|
|
||||||
process = Popen(parts, cwd=path, stdout=PIPE, stderr=PIPE,
|
|
||||||
stdin=f,
|
|
||||||
shell=(sys.platform == 'win32'))
|
|
||||||
out, err = process.communicate()
|
out, err = process.communicate()
|
||||||
|
else:
|
||||||
|
process = Popen(parts, cwd=path, stdin=PIPE, stdout=PIPE, stderr=PIPE,
|
||||||
|
shell=(sys.platform == 'win32'))
|
||||||
|
out, err = process.communicate(input=input_string)
|
||||||
except IOError, (errno, strerror):
|
except IOError, (errno, strerror):
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -35,8 +35,7 @@ cmd = [ 'python', 'tools/make_version_header.py',
|
||||||
RunAction(cef_dir, cmd)
|
RunAction(cef_dir, cmd)
|
||||||
|
|
||||||
print "\nPatching build configuration and source files for CEF..."
|
print "\nPatching build configuration and source files for CEF..."
|
||||||
cmd = [ 'python', 'tools/patcher.py',
|
cmd = [ 'python', 'tools/patcher.py' ]
|
||||||
'--patch-config', 'patch/patch.cfg' ]
|
|
||||||
RunAction(cef_dir, cmd)
|
RunAction(cef_dir, cmd)
|
||||||
|
|
||||||
print "\nGenerating CEF project files..."
|
print "\nGenerating CEF project files..."
|
||||||
|
|
|
@ -4,14 +4,21 @@
|
||||||
|
|
||||||
from exec_util import exec_cmd
|
from exec_util import exec_cmd
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
# Force use of the git version bundled with depot_tools.
|
||||||
|
git_exe = 'git.bat'
|
||||||
|
else:
|
||||||
|
git_exe = 'git'
|
||||||
|
|
||||||
def is_checkout(path):
|
def is_checkout(path):
|
||||||
""" Returns true if the path represents a git checkout. """
|
""" Returns true if the path represents a git checkout. """
|
||||||
return os.path.exists(os.path.join(path, '.git'))
|
return os.path.isdir(os.path.join(path, '.git'))
|
||||||
|
|
||||||
def get_hash(path = '.', branch = 'HEAD'):
|
def get_hash(path = '.', branch = 'HEAD'):
|
||||||
""" Returns the git hash for the specified branch/tag/hash. """
|
""" Returns the git hash for the specified branch/tag/hash. """
|
||||||
cmd = "git rev-parse %s" % branch
|
cmd = "%s rev-parse %s" % (git_exe, branch)
|
||||||
result = exec_cmd(cmd, path)
|
result = exec_cmd(cmd, path)
|
||||||
if result['out'] != '':
|
if result['out'] != '':
|
||||||
return result['out'].strip()
|
return result['out'].strip()
|
||||||
|
@ -19,7 +26,7 @@ def get_hash(path = '.', branch = 'HEAD'):
|
||||||
|
|
||||||
def get_url(path = '.'):
|
def get_url(path = '.'):
|
||||||
""" Returns the origin url for the specified path. """
|
""" Returns the origin url for the specified path. """
|
||||||
cmd = "git config --get remote.origin.url"
|
cmd = "%s config --get remote.origin.url" % git_exe
|
||||||
result = exec_cmd(cmd, path)
|
result = exec_cmd(cmd, path)
|
||||||
if result['out'] != '':
|
if result['out'] != '':
|
||||||
return result['out'].strip()
|
return result['out'].strip()
|
||||||
|
@ -27,7 +34,7 @@ def get_url(path = '.'):
|
||||||
|
|
||||||
def get_commit_number(path = '.', branch = 'HEAD'):
|
def get_commit_number(path = '.', branch = 'HEAD'):
|
||||||
""" Returns the number of commits in the specified branch/tag/hash. """
|
""" Returns the number of commits in the specified branch/tag/hash. """
|
||||||
cmd = "git rev-list --count %s" % branch
|
cmd = "%s rev-list --count %s" % (git_exe, branch)
|
||||||
result = exec_cmd(cmd, path)
|
result = exec_cmd(cmd, path)
|
||||||
if result['out'] != '':
|
if result['out'] != '':
|
||||||
return result['out'].strip()
|
return result['out'].strip()
|
||||||
|
@ -37,3 +44,64 @@ def get_changed_files(path = '.'):
|
||||||
""" Retrieves the list of changed files. """
|
""" Retrieves the list of changed files. """
|
||||||
# not implemented
|
# not implemented
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def write_indented_output(output):
|
||||||
|
""" Apply a fixed amount of intent to lines before printing. """
|
||||||
|
if output == '':
|
||||||
|
return
|
||||||
|
for line in output.split('\n'):
|
||||||
|
line = line.strip()
|
||||||
|
if len(line) == 0:
|
||||||
|
continue
|
||||||
|
sys.stdout.write('\t%s\n' % line)
|
||||||
|
|
||||||
|
def git_apply_patch_file(patch_path, patch_dir):
|
||||||
|
""" Apply |patch_path| to files in |patch_dir|. """
|
||||||
|
patch_name = os.path.basename(patch_path)
|
||||||
|
sys.stdout.write('\nApply %s in %s\n' % (patch_name, patch_dir))
|
||||||
|
|
||||||
|
if not os.path.isfile(patch_path):
|
||||||
|
sys.stdout.write('... patch file does not exist.\n')
|
||||||
|
return 'fail'
|
||||||
|
|
||||||
|
patch_string = open(patch_path, 'rb').read()
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
# Convert the patch to Unix line endings. This is necessary to avoid
|
||||||
|
# whitespace errors with git apply.
|
||||||
|
patch_string = patch_string.replace('\r\n', '\n')
|
||||||
|
|
||||||
|
# Git apply fails silently if not run relative to a respository root.
|
||||||
|
if not is_checkout(patch_dir):
|
||||||
|
sys.stdout.write('... patch directory is not a repository root.\n')
|
||||||
|
return 'fail'
|
||||||
|
|
||||||
|
# Output patch contents.
|
||||||
|
cmd = '%s apply -p0 --numstat' % git_exe
|
||||||
|
result = exec_cmd(cmd, patch_dir, patch_string)
|
||||||
|
write_indented_output(result['out'].replace('<stdin>', patch_name))
|
||||||
|
|
||||||
|
# Reverse check to see if the patch has already been applied.
|
||||||
|
cmd = '%s apply -p0 --reverse --check' % git_exe
|
||||||
|
result = exec_cmd(cmd, patch_dir, patch_string)
|
||||||
|
if result['err'].find('error:') < 0:
|
||||||
|
sys.stdout.write('... already applied (skipping).\n')
|
||||||
|
return 'skip'
|
||||||
|
|
||||||
|
# Normal check to see if the patch can be applied cleanly.
|
||||||
|
cmd = '%s apply -p0 --check' % git_exe
|
||||||
|
result = exec_cmd(cmd, patch_dir, patch_string)
|
||||||
|
if result['err'].find('error:') >= 0:
|
||||||
|
sys.stdout.write('... failed to apply:\n')
|
||||||
|
write_indented_output(result['err'].replace('<stdin>', patch_name))
|
||||||
|
return 'fail'
|
||||||
|
|
||||||
|
# Apply the patch file. This should always succeed because the previous
|
||||||
|
# command succeeded.
|
||||||
|
cmd = '%s apply -p0' % git_exe
|
||||||
|
result = exec_cmd(cmd, patch_dir, patch_string)
|
||||||
|
if result['err'] == '':
|
||||||
|
sys.stdout.write('... successfully applied.\n')
|
||||||
|
else:
|
||||||
|
sys.stdout.write('... successfully applied (with warnings):\n')
|
||||||
|
write_indented_output(result['err'].replace('<stdin>', patch_name))
|
||||||
|
return 'apply'
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
@echo off
|
@echo off
|
||||||
python.bat tools\patcher.py --patch-config patch/patch.cfg
|
python.bat tools\patcher.py
|
|
@ -1,2 +1,2 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
python tools/patcher.py --patch-config patch/patch.cfg
|
python tools/patcher.py
|
||||||
|
|
|
@ -75,7 +75,7 @@ if options.resave and options.revert:
|
||||||
|
|
||||||
# The CEF root directory is the parent directory of _this_ script.
|
# The CEF root directory is the parent directory of _this_ script.
|
||||||
cef_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
|
cef_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
|
||||||
src_dir = os.path.join(cef_dir, os.pardir)
|
src_dir = os.path.abspath(os.path.join(cef_dir, os.pardir))
|
||||||
|
|
||||||
# Determine the type of Chromium checkout.
|
# Determine the type of Chromium checkout.
|
||||||
if not git.is_checkout(src_dir):
|
if not git.is_checkout(src_dir):
|
||||||
|
@ -104,8 +104,10 @@ for patch in patches:
|
||||||
|
|
||||||
if os.path.isfile(patch_file):
|
if os.path.isfile(patch_file):
|
||||||
msg('Reading patch file %s' % patch_file)
|
msg('Reading patch file %s' % patch_file)
|
||||||
patch_root = patch['path']
|
if 'path' in patch:
|
||||||
patch_root_abs = os.path.abspath(os.path.join(cef_dir, patch_root))
|
patch_root_abs = os.path.abspath(os.path.join(src_dir, patch['path']))
|
||||||
|
else:
|
||||||
|
patch_root_abs = src_dir
|
||||||
|
|
||||||
# Retrieve the list of paths modified by the patch file.
|
# Retrieve the list of paths modified by the patch file.
|
||||||
patch_paths = extract_paths(patch_file)
|
patch_paths = extract_paths(patch_file)
|
||||||
|
@ -136,7 +138,8 @@ for patch in patches:
|
||||||
if not options.revert:
|
if not options.revert:
|
||||||
# Apply the patch file.
|
# Apply the patch file.
|
||||||
msg('Applying patch to %s' % patch_root_abs)
|
msg('Applying patch to %s' % patch_root_abs)
|
||||||
result = exec_cmd('patch -p0', patch_root_abs, patch_file)
|
patch_string = open(patch_file, 'rb').read()
|
||||||
|
result = exec_cmd('patch -p0', patch_root_abs, patch_string)
|
||||||
if result['err'] != '':
|
if result['err'] != '':
|
||||||
raise Exception('Failed to apply patch file: %s' % result['err'])
|
raise Exception('Failed to apply patch file: %s' % result['err'])
|
||||||
sys.stdout.write(result['out'])
|
sys.stdout.write(result['out'])
|
||||||
|
|
|
@ -1,615 +0,0 @@
|
||||||
""" Patch utility to apply unified diffs """
|
|
||||||
""" Brute-force line-by-line parsing
|
|
||||||
|
|
||||||
Project home: http://code.google.com/p/python-patch/
|
|
||||||
|
|
||||||
This file is subject to the MIT license available here:
|
|
||||||
http://www.opensource.org/licenses/mit-license.php
|
|
||||||
|
|
||||||
CEF Changes
|
|
||||||
-----------
|
|
||||||
|
|
||||||
2016/10/27
|
|
||||||
- Create folders for new files created by a patch if needed
|
|
||||||
- Adding support for patches created with git diff on non svn platforms
|
|
||||||
(git diff on OSX creates source/target as /dev/null
|
|
||||||
for new/deleted files)
|
|
||||||
|
|
||||||
2015/04/22
|
|
||||||
- Write to stdout instead of using warning() for messages
|
|
||||||
|
|
||||||
2013/01/03
|
|
||||||
- Add support for patches containing new files
|
|
||||||
|
|
||||||
2009/07/22
|
|
||||||
- Add a 'root_directory' argument to PatchInfo::apply
|
|
||||||
- Fix a Python 2.4 compile error in PatchInfo::parse_stream
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
__author__ = "techtonik.rainforce.org"
|
|
||||||
__version__ = "8.12-1"
|
|
||||||
|
|
||||||
import copy
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
from stat import *
|
|
||||||
# cStringIO doesn't support unicode in 2.5
|
|
||||||
from StringIO import StringIO
|
|
||||||
from logging import debug, info
|
|
||||||
|
|
||||||
from os.path import exists, isfile
|
|
||||||
from os import unlink
|
|
||||||
|
|
||||||
debugmode = False
|
|
||||||
|
|
||||||
|
|
||||||
def from_file(filename):
|
|
||||||
""" read and parse patch file
|
|
||||||
return PatchInfo() object
|
|
||||||
"""
|
|
||||||
|
|
||||||
info("reading patch from file %s" % filename)
|
|
||||||
fp = open(filename, "rb")
|
|
||||||
patch = PatchInfo(fp)
|
|
||||||
fp.close()
|
|
||||||
return patch
|
|
||||||
|
|
||||||
|
|
||||||
def from_string(s):
|
|
||||||
""" parse text string and return PatchInfo() object """
|
|
||||||
return PatchInfo(
|
|
||||||
StringIO.StringIO(s)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def msg(message):
|
|
||||||
""" Output a message. """
|
|
||||||
sys.stdout.write('--> ' + message + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
class HunkInfo(object):
|
|
||||||
""" parsed hunk data (hunk starts with @@ -R +R @@) """
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
# define HunkInfo data members
|
|
||||||
self.startsrc=None
|
|
||||||
self.linessrc=None
|
|
||||||
self.starttgt=None
|
|
||||||
self.linestgt=None
|
|
||||||
self.invalid=False
|
|
||||||
self.text=[]
|
|
||||||
|
|
||||||
def copy(self):
|
|
||||||
return copy.copy(self)
|
|
||||||
|
|
||||||
# def apply(self, estream):
|
|
||||||
# """ write hunk data into enumerable stream
|
|
||||||
# return strings one by one until hunk is
|
|
||||||
# over
|
|
||||||
#
|
|
||||||
# enumerable stream are tuples (lineno, line)
|
|
||||||
# where lineno starts with 0
|
|
||||||
# """
|
|
||||||
# pass
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PatchInfo(object):
|
|
||||||
""" patch information container """
|
|
||||||
|
|
||||||
def __init__(self, stream=None):
|
|
||||||
""" parse incoming stream """
|
|
||||||
|
|
||||||
# define PatchInfo data members
|
|
||||||
# table with a row for every source file
|
|
||||||
|
|
||||||
#: list of source filenames
|
|
||||||
self.source=None
|
|
||||||
self.target=None
|
|
||||||
#: list of lists of hunks
|
|
||||||
self.hunks=None
|
|
||||||
#: file endings statistics for every hunk
|
|
||||||
self.hunkends=None
|
|
||||||
|
|
||||||
if stream:
|
|
||||||
self.parse_stream(stream)
|
|
||||||
|
|
||||||
def copy(self):
|
|
||||||
return copy.copy(self)
|
|
||||||
|
|
||||||
def parse_stream(self, stream):
|
|
||||||
""" parse unified diff """
|
|
||||||
self.source = []
|
|
||||||
self.target = []
|
|
||||||
self.hunks = []
|
|
||||||
self.hunkends = []
|
|
||||||
|
|
||||||
# define possible file regions that will direct the parser flow
|
|
||||||
header = False # comments before the patch body
|
|
||||||
filenames = False # lines starting with --- and +++
|
|
||||||
|
|
||||||
hunkhead = False # @@ -R +R @@ sequence
|
|
||||||
hunkbody = False #
|
|
||||||
hunkskip = False # skipping invalid hunk mode
|
|
||||||
|
|
||||||
header = True
|
|
||||||
lineends = dict(lf=0, crlf=0, cr=0)
|
|
||||||
nextfileno = 0
|
|
||||||
nexthunkno = 0 #: even if index starts with 0 user messages number hunks from 1
|
|
||||||
|
|
||||||
# hunkinfo holds parsed values, hunkactual - calculated
|
|
||||||
hunkinfo = HunkInfo()
|
|
||||||
hunkactual = dict(linessrc=None, linestgt=None)
|
|
||||||
|
|
||||||
fe = enumerate(stream)
|
|
||||||
for lineno, line in fe:
|
|
||||||
|
|
||||||
# analyze state
|
|
||||||
if header and line.startswith("--- "):
|
|
||||||
header = False
|
|
||||||
# switch to filenames state
|
|
||||||
filenames = True
|
|
||||||
#: skip hunkskip and hunkbody code until you read definition of hunkhead
|
|
||||||
if hunkbody:
|
|
||||||
# process line first
|
|
||||||
if re.match(r"^[- \+\\]", line):
|
|
||||||
# gather stats about line endings
|
|
||||||
if line.endswith("\r\n"):
|
|
||||||
self.hunkends[nextfileno-1]["crlf"] += 1
|
|
||||||
elif line.endswith("\n"):
|
|
||||||
self.hunkends[nextfileno-1]["lf"] += 1
|
|
||||||
elif line.endswith("\r"):
|
|
||||||
self.hunkends[nextfileno-1]["cr"] += 1
|
|
||||||
|
|
||||||
if line.startswith("-"):
|
|
||||||
hunkactual["linessrc"] += 1
|
|
||||||
elif line.startswith("+"):
|
|
||||||
hunkactual["linestgt"] += 1
|
|
||||||
elif not line.startswith("\\"):
|
|
||||||
hunkactual["linessrc"] += 1
|
|
||||||
hunkactual["linestgt"] += 1
|
|
||||||
hunkinfo.text.append(line)
|
|
||||||
# todo: handle \ No newline cases
|
|
||||||
else:
|
|
||||||
msg("invalid hunk no.%d at %d for target file %s" % (nexthunkno, lineno+1, self.target[nextfileno-1]))
|
|
||||||
# add hunk status node
|
|
||||||
self.hunks[nextfileno-1].append(hunkinfo.copy())
|
|
||||||
self.hunks[nextfileno-1][nexthunkno-1]["invalid"] = True
|
|
||||||
# switch to hunkskip state
|
|
||||||
hunkbody = False
|
|
||||||
hunkskip = True
|
|
||||||
|
|
||||||
# check exit conditions
|
|
||||||
if hunkactual["linessrc"] > hunkinfo.linessrc or hunkactual["linestgt"] > hunkinfo.linestgt:
|
|
||||||
msg("extra hunk no.%d lines at %d for target %s" % (nexthunkno, lineno+1, self.target[nextfileno-1]))
|
|
||||||
# add hunk status node
|
|
||||||
self.hunks[nextfileno-1].append(hunkinfo.copy())
|
|
||||||
self.hunks[nextfileno-1][nexthunkno-1]["invalid"] = True
|
|
||||||
# switch to hunkskip state
|
|
||||||
hunkbody = False
|
|
||||||
hunkskip = True
|
|
||||||
elif hunkinfo.linessrc == hunkactual["linessrc"] and hunkinfo.linestgt == hunkactual["linestgt"]:
|
|
||||||
self.hunks[nextfileno-1].append(hunkinfo.copy())
|
|
||||||
# switch to hunkskip state
|
|
||||||
hunkbody = False
|
|
||||||
hunkskip = True
|
|
||||||
|
|
||||||
# detect mixed window/unix line ends
|
|
||||||
ends = self.hunkends[nextfileno-1]
|
|
||||||
if ((ends["cr"]!=0) + (ends["crlf"]!=0) + (ends["lf"]!=0)) > 1:
|
|
||||||
msg("inconsistent line ends in patch hunks for %s" % self.source[nextfileno-1])
|
|
||||||
if debugmode:
|
|
||||||
debuglines = dict(ends)
|
|
||||||
debuglines.update(file=self.target[nextfileno-1], hunk=nexthunkno)
|
|
||||||
debug("crlf: %(crlf)d lf: %(lf)d cr: %(cr)d\t - file: %(file)s hunk: %(hunk)d" % debuglines)
|
|
||||||
|
|
||||||
if hunkskip:
|
|
||||||
match = re.match("^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))?", line)
|
|
||||||
if match:
|
|
||||||
# switch to hunkhead state
|
|
||||||
hunkskip = False
|
|
||||||
hunkhead = True
|
|
||||||
elif line.startswith("--- "):
|
|
||||||
# switch to filenames state
|
|
||||||
hunkskip = False
|
|
||||||
filenames = True
|
|
||||||
if debugmode and len(self.source) > 0:
|
|
||||||
debug("- %2d hunks for %s" % (len(self.hunks[nextfileno-1]), self.source[nextfileno-1]))
|
|
||||||
|
|
||||||
if filenames:
|
|
||||||
if line.startswith("--- "):
|
|
||||||
if nextfileno in self.source:
|
|
||||||
msg("skipping invalid patch for %s" % self.source[nextfileno])
|
|
||||||
del self.source[nextfileno]
|
|
||||||
# double source filename line is encountered
|
|
||||||
# attempt to restart from this second line
|
|
||||||
re_filename = "^--- ([^\t]+)"
|
|
||||||
match = re.match(re_filename, line)
|
|
||||||
if not match:
|
|
||||||
msg("skipping invalid filename at line %d" % lineno)
|
|
||||||
# switch back to header state
|
|
||||||
filenames = False
|
|
||||||
header = True
|
|
||||||
else:
|
|
||||||
self.source.append(match.group(1).strip())
|
|
||||||
elif not line.startswith("+++ "):
|
|
||||||
if nextfileno in self.source:
|
|
||||||
msg("skipping invalid patch with no target for %s" % self.source[nextfileno])
|
|
||||||
del self.source[nextfileno]
|
|
||||||
else:
|
|
||||||
# this should be unreachable
|
|
||||||
msg("skipping invalid target patch")
|
|
||||||
filenames = False
|
|
||||||
header = True
|
|
||||||
else:
|
|
||||||
if nextfileno in self.target:
|
|
||||||
msg("skipping invalid patch - double target at line %d" % lineno)
|
|
||||||
del self.source[nextfileno]
|
|
||||||
del self.target[nextfileno]
|
|
||||||
nextfileno -= 1
|
|
||||||
# double target filename line is encountered
|
|
||||||
# switch back to header state
|
|
||||||
filenames = False
|
|
||||||
header = True
|
|
||||||
else:
|
|
||||||
re_filename = "^\+\+\+ ([^\t]+)"
|
|
||||||
match = re.match(re_filename, line)
|
|
||||||
if not match:
|
|
||||||
msg("skipping invalid patch - no target filename at line %d" % lineno)
|
|
||||||
# switch back to header state
|
|
||||||
filenames = False
|
|
||||||
header = True
|
|
||||||
else:
|
|
||||||
self.target.append(match.group(1).strip())
|
|
||||||
nextfileno += 1
|
|
||||||
# switch to hunkhead state
|
|
||||||
filenames = False
|
|
||||||
hunkhead = True
|
|
||||||
nexthunkno = 0
|
|
||||||
self.hunks.append([])
|
|
||||||
self.hunkends.append(lineends.copy())
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
|
||||||
if hunkhead:
|
|
||||||
match = re.match("^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))?", line)
|
|
||||||
if not match:
|
|
||||||
if nextfileno-1 not in self.hunks:
|
|
||||||
msg("skipping invalid patch with no hunks for file %s" % self.target[nextfileno-1])
|
|
||||||
# switch to header state
|
|
||||||
hunkhead = False
|
|
||||||
header = True
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
# switch to header state
|
|
||||||
hunkhead = False
|
|
||||||
header = True
|
|
||||||
else:
|
|
||||||
hunkinfo.startsrc = int(match.group(1))
|
|
||||||
if match.group(3):
|
|
||||||
hunkinfo.linessrc = int(match.group(3))
|
|
||||||
else:
|
|
||||||
hunkinfo.linessrc = 1
|
|
||||||
hunkinfo.starttgt = int(match.group(4))
|
|
||||||
if match.group(6):
|
|
||||||
hunkinfo.linestgt = int(match.group(6))
|
|
||||||
else:
|
|
||||||
hunkinfo.linestgt = 1
|
|
||||||
hunkinfo.invalid = False
|
|
||||||
hunkinfo.text = []
|
|
||||||
|
|
||||||
hunkactual["linessrc"] = hunkactual["linestgt"] = 0
|
|
||||||
|
|
||||||
# switch to hunkbody state
|
|
||||||
hunkhead = False
|
|
||||||
hunkbody = True
|
|
||||||
nexthunkno += 1
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if not hunkskip:
|
|
||||||
msg("patch file incomplete - %s" % filename)
|
|
||||||
# sys.exit(?)
|
|
||||||
else:
|
|
||||||
# duplicated message when an eof is reached
|
|
||||||
if debugmode and len(self.source) > 0:
|
|
||||||
debug("- %2d hunks for %s" % (len(self.hunks[nextfileno-1]), self.source[nextfileno-1]))
|
|
||||||
|
|
||||||
info("total files: %d total hunks: %d" % (len(self.source), sum(len(hset) for hset in self.hunks)))
|
|
||||||
|
|
||||||
def apply(self, root_directory = None):
|
|
||||||
""" apply parsed patch """
|
|
||||||
|
|
||||||
total = len(self.source)
|
|
||||||
for fileno, filename in enumerate(self.source):
|
|
||||||
# git diff on OSX creates source/target as /dev/null for new/deleted files
|
|
||||||
if filename != '/dev/null':
|
|
||||||
f2patch = filename
|
|
||||||
else:
|
|
||||||
f2patch = self.target[fileno]
|
|
||||||
|
|
||||||
if not root_directory is None:
|
|
||||||
f2patch = root_directory + f2patch
|
|
||||||
if not exists(f2patch):
|
|
||||||
# if the patch contains a single hunk at position 0 consider it a new file
|
|
||||||
if len(self.hunks[fileno]) == 1 and self.hunks[fileno][0].startsrc == 0:
|
|
||||||
hunklines = [x[1:].rstrip("\r\n") for x in self.hunks[fileno][0].text if x[0] in " +"]
|
|
||||||
if len(hunklines) > 0:
|
|
||||||
f2patchfolder = os.path.dirname(os.path.abspath(f2patch))
|
|
||||||
if not os.path.exists(f2patchfolder):
|
|
||||||
msg("creating folder %s" % (f2patchfolder))
|
|
||||||
os.makedirs(f2patchfolder)
|
|
||||||
msg("creating file %s" % (f2patch))
|
|
||||||
f = open(f2patch, "wb")
|
|
||||||
for line in hunklines:
|
|
||||||
f.write(line + "\n")
|
|
||||||
f.close()
|
|
||||||
continue
|
|
||||||
|
|
||||||
f2patch = self.target[fileno]
|
|
||||||
if not exists(f2patch):
|
|
||||||
msg("source/target file does not exist\n--- %s\n+++ %s" % (filename, f2patch))
|
|
||||||
continue
|
|
||||||
if not isfile(f2patch):
|
|
||||||
msg("not a file - %s" % f2patch)
|
|
||||||
continue
|
|
||||||
filename = f2patch
|
|
||||||
|
|
||||||
info("processing %d/%d:\t %s" % (fileno+1, total, filename))
|
|
||||||
|
|
||||||
# validate before patching
|
|
||||||
f2fp = open(filename)
|
|
||||||
hunkno = 0
|
|
||||||
hunk = self.hunks[fileno][hunkno]
|
|
||||||
hunkfind = []
|
|
||||||
hunkreplace = []
|
|
||||||
validhunks = 0
|
|
||||||
canpatch = False
|
|
||||||
for lineno, line in enumerate(f2fp):
|
|
||||||
if lineno+1 < hunk.startsrc:
|
|
||||||
continue
|
|
||||||
elif lineno+1 == hunk.startsrc:
|
|
||||||
hunkfind = [x[1:].rstrip("\r\n") for x in hunk.text if x[0] in " -"]
|
|
||||||
hunkreplace = [x[1:].rstrip("\r\n") for x in hunk.text if x[0] in " +"]
|
|
||||||
#pprint(hunkreplace)
|
|
||||||
hunklineno = 0
|
|
||||||
|
|
||||||
# todo \ No newline at end of file
|
|
||||||
|
|
||||||
# check hunks in source file
|
|
||||||
if lineno+1 < hunk.startsrc+len(hunkfind)-1:
|
|
||||||
if line.rstrip("\r\n") == hunkfind[hunklineno]:
|
|
||||||
hunklineno+=1
|
|
||||||
else:
|
|
||||||
debug("hunk no.%d doesn't match source file %s" % (hunkno+1, filename))
|
|
||||||
# file may be already patched, but we will check other hunks anyway
|
|
||||||
hunkno += 1
|
|
||||||
if hunkno < len(self.hunks[fileno]):
|
|
||||||
hunk = self.hunks[fileno][hunkno]
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
|
|
||||||
# check if processed line is the last line
|
|
||||||
if lineno+1 == hunk.startsrc+len(hunkfind)-1:
|
|
||||||
debug("file %s hunk no.%d -- is ready to be patched" % (filename, hunkno+1))
|
|
||||||
hunkno+=1
|
|
||||||
validhunks+=1
|
|
||||||
if hunkno < len(self.hunks[fileno]):
|
|
||||||
hunk = self.hunks[fileno][hunkno]
|
|
||||||
else:
|
|
||||||
if validhunks == len(self.hunks[fileno]):
|
|
||||||
# patch file
|
|
||||||
canpatch = True
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
if hunkno < len(self.hunks[fileno]) and \
|
|
||||||
(len(self.hunks[fileno]) != 1 or self.hunks[fileno][0].startsrc != 0):
|
|
||||||
msg("premature end of source file %s at hunk %d" % (filename, hunkno+1))
|
|
||||||
|
|
||||||
f2fp.close()
|
|
||||||
|
|
||||||
if validhunks < len(self.hunks[fileno]):
|
|
||||||
if check_patched(filename, self.hunks[fileno]):
|
|
||||||
msg("already patched %s" % filename)
|
|
||||||
else:
|
|
||||||
msg("source file is different - %s" % filename)
|
|
||||||
if canpatch:
|
|
||||||
backupname = filename+".orig"
|
|
||||||
if exists(backupname):
|
|
||||||
msg("can't backup original file to %s - aborting" % backupname)
|
|
||||||
else:
|
|
||||||
import shutil
|
|
||||||
shutil.move(filename, backupname)
|
|
||||||
if patch_hunks(backupname, filename, self.hunks[fileno]):
|
|
||||||
msg("successfully patched %s" % filename)
|
|
||||||
unlink(backupname)
|
|
||||||
else:
|
|
||||||
msg("error patching file %s" % filename)
|
|
||||||
shutil.copy(filename, filename+".invalid")
|
|
||||||
msg("invalid version is saved to %s" % filename+".invalid")
|
|
||||||
# todo: proper rejects
|
|
||||||
shutil.move(backupname, filename)
|
|
||||||
|
|
||||||
# todo: check for premature eof
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def check_patched(filename, hunks):
|
|
||||||
matched = True
|
|
||||||
fp = open(filename)
|
|
||||||
|
|
||||||
class NoMatch(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# special case for new files
|
|
||||||
try:
|
|
||||||
if len(hunks) == 1 and hunks[0].startsrc == 0:
|
|
||||||
hunklines = [x[1:].rstrip("\r\n") for x in hunks[0].text if x[0] in " +"]
|
|
||||||
if len(hunklines) > 0:
|
|
||||||
for line in hunklines:
|
|
||||||
srcline = fp.readline()
|
|
||||||
if not len(srcline) or srcline.rstrip("\r\n") != line:
|
|
||||||
raise NoMatch
|
|
||||||
srcline = fp.readline()
|
|
||||||
if len(srcline):
|
|
||||||
raise NoMatch
|
|
||||||
fp.close()
|
|
||||||
return True
|
|
||||||
except NoMatch:
|
|
||||||
fp.close()
|
|
||||||
fp = open(filename)
|
|
||||||
|
|
||||||
lineno = 1
|
|
||||||
line = fp.readline()
|
|
||||||
hno = None
|
|
||||||
try:
|
|
||||||
if not len(line):
|
|
||||||
raise NoMatch
|
|
||||||
for hno, h in enumerate(hunks):
|
|
||||||
# skip to line just before hunk starts
|
|
||||||
while lineno < h.starttgt-1:
|
|
||||||
line = fp.readline()
|
|
||||||
lineno += 1
|
|
||||||
if not len(line):
|
|
||||||
raise NoMatch
|
|
||||||
for hline in h.text:
|
|
||||||
# todo: \ No newline at the end of file
|
|
||||||
if not hline.startswith("-") and not hline.startswith("\\"):
|
|
||||||
line = fp.readline()
|
|
||||||
lineno += 1
|
|
||||||
if not len(line):
|
|
||||||
raise NoMatch
|
|
||||||
if line.rstrip("\r\n") != hline[1:].rstrip("\r\n"):
|
|
||||||
msg("file is not patched - failed hunk: %d" % (hno+1))
|
|
||||||
raise NoMatch
|
|
||||||
except NoMatch:
|
|
||||||
matched = False
|
|
||||||
# todo: display failed hunk, i.e. expected/found
|
|
||||||
|
|
||||||
fp.close()
|
|
||||||
return matched
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def patch_stream(instream, hunks):
|
|
||||||
""" given a source stream and hunks iterable, yield patched stream
|
|
||||||
|
|
||||||
converts lineends in hunk lines to the best suitable format
|
|
||||||
autodetected from input
|
|
||||||
"""
|
|
||||||
|
|
||||||
# todo: At the moment substituted lineends may not be the same
|
|
||||||
# at the start and at the end of patching. Also issue a
|
|
||||||
# warning/throw about mixed lineends (is it really needed?)
|
|
||||||
|
|
||||||
hunks = iter(hunks)
|
|
||||||
|
|
||||||
srclineno = 1
|
|
||||||
|
|
||||||
lineends = {'\n':0, '\r\n':0, '\r':0}
|
|
||||||
def get_line():
|
|
||||||
"""
|
|
||||||
local utility function - return line from source stream
|
|
||||||
collecting line end statistics on the way
|
|
||||||
"""
|
|
||||||
line = instream.readline()
|
|
||||||
# 'U' mode works only with text files
|
|
||||||
if line.endswith("\r\n"):
|
|
||||||
lineends["\r\n"] += 1
|
|
||||||
elif line.endswith("\n"):
|
|
||||||
lineends["\n"] += 1
|
|
||||||
elif line.endswith("\r"):
|
|
||||||
lineends["\r"] += 1
|
|
||||||
return line
|
|
||||||
|
|
||||||
|
|
||||||
for hno, h in enumerate(hunks):
|
|
||||||
debug("hunk %d" % (hno+1))
|
|
||||||
# skip to line just before hunk starts
|
|
||||||
while srclineno < h.startsrc:
|
|
||||||
yield get_line()
|
|
||||||
srclineno += 1
|
|
||||||
|
|
||||||
for hline in h.text:
|
|
||||||
# todo: check \ No newline at the end of file
|
|
||||||
if hline.startswith("-") or hline.startswith("\\"):
|
|
||||||
get_line()
|
|
||||||
srclineno += 1
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if not hline.startswith("+"):
|
|
||||||
get_line()
|
|
||||||
srclineno += 1
|
|
||||||
line2write = hline[1:]
|
|
||||||
# detect if line ends are consistent in source file
|
|
||||||
if sum([bool(lineends[x]) for x in lineends]) == 1:
|
|
||||||
newline = [x for x in lineends if lineends[x] != 0][0]
|
|
||||||
yield line2write.rstrip("\r\n")+newline
|
|
||||||
else: # newlines are mixed
|
|
||||||
yield line2write
|
|
||||||
|
|
||||||
for line in instream:
|
|
||||||
yield line
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def patch_hunks(srcname, tgtname, hunks):
|
|
||||||
# get the current file mode
|
|
||||||
mode = os.stat(srcname)[ST_MODE]
|
|
||||||
|
|
||||||
src = open(srcname, "rb")
|
|
||||||
tgt = open(tgtname, "wb")
|
|
||||||
|
|
||||||
debug("processing target file %s" % tgtname)
|
|
||||||
|
|
||||||
tgt.writelines(patch_stream(src, hunks))
|
|
||||||
|
|
||||||
tgt.close()
|
|
||||||
src.close()
|
|
||||||
|
|
||||||
# restore the file mode
|
|
||||||
os.chmod(tgtname, mode)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from optparse import OptionParser
|
|
||||||
from os.path import exists
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
opt = OptionParser(usage="%prog [options] unipatch-file", version="python-patch %s" % __version__)
|
|
||||||
opt.add_option("-d", action="store_true", dest="debugmode", help="debug mode")
|
|
||||||
(options, args) = opt.parse_args()
|
|
||||||
|
|
||||||
if not args:
|
|
||||||
opt.print_version()
|
|
||||||
print("")
|
|
||||||
opt.print_help()
|
|
||||||
sys.exit()
|
|
||||||
debugmode = options.debugmode
|
|
||||||
patchfile = args[0]
|
|
||||||
if not exists(patchfile) or not isfile(patchfile):
|
|
||||||
sys.exit("patch file does not exist - %s" % patchfile)
|
|
||||||
|
|
||||||
|
|
||||||
if debugmode:
|
|
||||||
logging.basicConfig(level=logging.DEBUG, format="%(levelname)8s %(message)s")
|
|
||||||
else:
|
|
||||||
logging.basicConfig(level=logging.INFO, format="%(message)s")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
patch = from_file(patchfile)
|
|
||||||
#pprint(patch)
|
|
||||||
patch.apply()
|
|
||||||
|
|
||||||
# todo: document and test line ends handling logic - patch.py detects proper line-endings
|
|
||||||
# for inserted hunks and issues a warning if patched file has incosistent line ends
|
|
|
@ -1,32 +1,18 @@
|
||||||
Chromium Embedded Framework (CEF) Patch Application Tool -- patcher.py
|
Chromium Embedded Framework (CEF) Patch Application Tool -- patcher.py
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Document Last Updated: July 23, 2009
|
Document Last Updated: April 26, 2017
|
||||||
|
|
||||||
|
|
||||||
OVERVIEW
|
OVERVIEW
|
||||||
--------
|
--------
|
||||||
|
|
||||||
The CEF patch application tool is used by the patch project to apply patches
|
The CEF patch application tool is used to apply patches to the Chromium, Blink
|
||||||
to the Chromium and WebKit code bases. Currently only unified diff format is
|
and third-party code bases. Currently only unified diff format is supported.
|
||||||
supported. See the README.txt file in the patch directory for information on
|
See the README.txt file in the patch directory for information on how this tool
|
||||||
how the patch project uses this tool.
|
is used.
|
||||||
|
|
||||||
The 'patcher.bat' file can be used to run the patch application tool with
|
The patch.[bat|sh] file can be used to run the patch application tool with
|
||||||
command-line arguments that match the default CEF directory structure and
|
command-line arguments that match the default CEF directory structure and
|
||||||
output options. Run 'patcher.py -h' for a complete list of available command-
|
output options. Run 'patcher.py -h' for a complete list of available command-
|
||||||
line arguments.
|
line arguments.
|
||||||
|
|
||||||
|
|
||||||
CREDITS
|
|
||||||
-------
|
|
||||||
|
|
||||||
Thanks go to techtonik for developing the python-patch script. The
|
|
||||||
patch_util.py file is a slightly modified version of the original script which
|
|
||||||
can be found here: http://code.google.com/p/python-patch/
|
|
||||||
|
|
||||||
|
|
||||||
WORK REMAINING
|
|
||||||
--------------
|
|
||||||
|
|
||||||
o Add support for the GIT patch format.
|
|
||||||
|
|
|
@ -7,36 +7,44 @@ from optparse import OptionParser
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from file_util import *
|
from file_util import *
|
||||||
from patch_util import *
|
from git_util import git_apply_patch_file
|
||||||
|
|
||||||
|
|
||||||
# Cannot be loaded as a module.
|
# Cannot be loaded as a module.
|
||||||
if __name__ != "__main__":
|
if __name__ != "__main__":
|
||||||
sys.stdout.write('This file cannot be loaded as a module!')
|
sys.stdout.write('This file cannot be loaded as a module!')
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
# The CEF root directory is the parent directory of _this_ script.
|
||||||
|
cef_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
|
||||||
|
cef_patch_dir = os.path.join(cef_dir, 'patch')
|
||||||
|
src_dir = os.path.abspath(os.path.join(cef_dir, os.pardir))
|
||||||
|
|
||||||
def normalize_dir(dir):
|
def write_note(type, note):
|
||||||
''' Normalize the directory value. '''
|
separator = '-' * 79 + '\n'
|
||||||
dir = dir.replace('\\', '/')
|
sys.stdout.write(separator)
|
||||||
if dir[-1] != '/':
|
sys.stdout.write('!!!! %s: %s\n' % (type, note))
|
||||||
dir += '/'
|
sys.stdout.write(separator)
|
||||||
return dir
|
|
||||||
|
|
||||||
def patch_file(patch_file, patch_dir):
|
def apply_patch_file(patch_file, patch_dir):
|
||||||
''' Apply a single patch file in a single directory. '''
|
''' Apply a specific patch file in optional patch directory. '''
|
||||||
if not os.path.isfile(patch_file):
|
patch_path = os.path.join(cef_patch_dir, 'patches', patch_file + '.patch')
|
||||||
raise Exception('Patch file %s does not exist.' % patch_file)
|
|
||||||
|
|
||||||
sys.stdout.write('Reading patch file %s\n' % patch_file)
|
if patch_dir is None or len(patch_dir) == 0:
|
||||||
patchObj = from_file(patch_file)
|
patch_dir = src_dir
|
||||||
patchObj.apply(normalize_dir(patch_dir))
|
else:
|
||||||
|
if not os.path.isabs(patch_dir):
|
||||||
|
# Apply patch relative to the Chromium 'src' directory.
|
||||||
|
patch_dir = os.path.join(src_dir, patch_dir)
|
||||||
|
patch_dir = os.path.abspath(patch_dir)
|
||||||
|
|
||||||
def patch_config(config_file):
|
result = git_apply_patch_file(patch_path, patch_dir)
|
||||||
|
if result == 'fail':
|
||||||
|
write_note('ERROR', 'This patch failed to apply. Your build will not be correct.')
|
||||||
|
return result
|
||||||
|
|
||||||
|
def apply_patch_config():
|
||||||
''' Apply patch files based on a configuration file. '''
|
''' Apply patch files based on a configuration file. '''
|
||||||
# Normalize the patch directory value.
|
config_file = os.path.join(cef_patch_dir, 'patch.cfg')
|
||||||
patchdir = normalize_dir(os.path.dirname(os.path.abspath(config_file)))
|
|
||||||
|
|
||||||
if not os.path.isfile(config_file):
|
if not os.path.isfile(config_file):
|
||||||
raise Exception('Patch config file %s does not exist.' % config_file)
|
raise Exception('Patch config file %s does not exist.' % config_file)
|
||||||
|
|
||||||
|
@ -45,24 +53,33 @@ def patch_config(config_file):
|
||||||
execfile(config_file, scope)
|
execfile(config_file, scope)
|
||||||
patches = scope["patches"]
|
patches = scope["patches"]
|
||||||
|
|
||||||
|
results = {'apply': 0, 'skip': 0, 'fail': 0}
|
||||||
|
|
||||||
for patch in patches:
|
for patch in patches:
|
||||||
file = patchdir+'patches/'+patch['name']+'.patch'
|
patch_file = patch['name']
|
||||||
dopatch = True
|
dopatch = True
|
||||||
|
|
||||||
if 'condition' in patch:
|
if 'condition' in patch:
|
||||||
# Check that the environment variable is set.
|
# Check that the environment variable is set.
|
||||||
if patch['condition'] not in os.environ:
|
if patch['condition'] not in os.environ:
|
||||||
sys.stdout.write('Skipping patch file %s\n' % file)
|
sys.stdout.write('\nSkipping patch file %s\n' % patch_file)
|
||||||
dopatch = False
|
dopatch = False
|
||||||
|
|
||||||
if dopatch:
|
if dopatch:
|
||||||
patch_file(file, patch['path'])
|
result = apply_patch_file(patch_file, patch['path'] if 'path' in patch else None)
|
||||||
if 'note' in patch:
|
results[result] += 1
|
||||||
separator = '-' * 79 + '\n'
|
|
||||||
sys.stdout.write(separator)
|
|
||||||
sys.stdout.write('NOTE: %s\n' % patch['note'])
|
|
||||||
sys.stdout.write(separator)
|
|
||||||
|
|
||||||
|
if 'note' in patch:
|
||||||
|
write_note('NOTE', patch['note'])
|
||||||
|
else:
|
||||||
|
results['skip'] += 1
|
||||||
|
|
||||||
|
sys.stdout.write('\n%d patches total (%d applied, %d skipped, %d failed)\n' % \
|
||||||
|
(len(patches), results['apply'], results['skip'], results['fail']))
|
||||||
|
|
||||||
|
if results['fail'] > 0:
|
||||||
|
sys.stdout.write('\n')
|
||||||
|
write_note('ERROR', '%d patches failed to apply. Your build will not be correct.' % results['fail'])
|
||||||
|
|
||||||
# Parse command-line options.
|
# Parse command-line options.
|
||||||
disc = """
|
disc = """
|
||||||
|
@ -70,18 +87,13 @@ This utility applies patch files.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
parser = OptionParser(description=disc)
|
parser = OptionParser(description=disc)
|
||||||
parser.add_option('--patch-config', dest='patchconfig', metavar='DIR',
|
|
||||||
help='patch configuration file')
|
|
||||||
parser.add_option('--patch-file', dest='patchfile', metavar='FILE',
|
parser.add_option('--patch-file', dest='patchfile', metavar='FILE',
|
||||||
help='patch source file')
|
help='patch source file')
|
||||||
parser.add_option('--patch-dir', dest='patchdir', metavar='DIR',
|
parser.add_option('--patch-dir', dest='patchdir', metavar='DIR',
|
||||||
help='patch target directory')
|
help='patch target directory')
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
if not options.patchconfig is None:
|
if not options.patchfile is None:
|
||||||
patch_config(options.patchconfig)
|
apply_patch_file(options.patchfile, options.patchdir)
|
||||||
elif not options.patchfile is None and not options.patchdir is None:
|
|
||||||
patch_file(options.patchfile, options.patchdir)
|
|
||||||
else:
|
else:
|
||||||
parser.print_help(sys.stdout)
|
apply_patch_config()
|
||||||
sys.exit()
|
|
||||||
|
|
Loading…
Reference in New Issue