Automated the definitions of webview attributes as properties on the webview node

Imported from:
aef58f49f6%5E%21/
This commit is contained in:
Cheng Zhao 2014-12-08 17:05:57 -08:00
parent 2c27b953b5
commit b6b8b936f2
2 changed files with 10 additions and 30 deletions

View file

@ -15,16 +15,22 @@ class WebViewAttribute
# Sets the attribute's value.
setValue: (value) -> @webViewImpl.webviewNode.setAttribute(@name, value || '')
# Defines this attribute as a property on the webview node.
define: ->
Object.defineProperty @webViewImpl.webviewNode, @name,
get: => @getValue()
set: (value) => @setValue value
enumerable: true
# Called when the attribute's value changes.
handleMutation: ->
# Attribute specifying whether transparency is allowed in the webview.
# An attribute that is treated as a Boolean.
class BooleanAttribute extends WebViewAttribute
constructor: (name, webViewImpl) ->
super name, webViewImpl
getValue: ->
# This attribute is treated as a boolean, and is retrieved as such.
@webViewImpl.webviewNode.hasAttribute @name
setValue: (value) ->

View file

@ -99,20 +99,9 @@ class WebView
validateExecuteCodeCall: ->
throw new Error(webViewConstants.ERROR_MSG_CANNOT_INJECT_SCRIPT) unless @guestInstanceId
setupAutoSizeProperties: ->
for attributeName in AUTO_SIZE_ATTRIBUTES
Object.defineProperty @webviewNode, attributeName,
get: => @attributes[attributeName].getValue()
set: (value) => @attributes[attributeName].setValue value
enumerable: true
setupWebviewNodeProperties: ->
@setupAutoSizeProperties()
Object.defineProperty @webviewNode, webViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY,
get: => @attributes[webViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY].getValue()
set: (value) => @attributes[webViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY].setValue value
enumerable: true
for attributeName of @attributes
@attributes[attributeName].define()
# We cannot use {writable: true} property descriptor because we want a
# dynamic getter value.
@ -123,21 +112,6 @@ class WebView
# No setter.
enumerable: true
Object.defineProperty @webviewNode, webViewConstants.ATTRIBUTE_PARTITION,
get: => @attributes[webViewConstants.ATTRIBUTE_PARTITION].getValue()
set: (value) => @attributes[webViewConstants.ATTRIBUTE_PARTITION].setValue value
enumerable: true
Object.defineProperty @webviewNode, webViewConstants.ATTRIBUTE_SRC,
get: => @attributes[webViewConstants.ATTRIBUTE_SRC].getValue()
set: (value) => @attributes[webViewConstants.ATTRIBUTE_SRC].setValue value
enumerable: true
Object.defineProperty @webviewNode, webViewConstants.ATTRIBUTE_HTTPREFERRER,
get: => @attributes[webViewConstants.ATTRIBUTE_HTTPREFERRER].getValue()
set: (value) => @attributes[webViewConstants.ATTRIBUTE_HTTPREFERRER].setValue value
enumerable: true
# The purpose of this mutation observer is to catch assignment to the src
# attribute without any changes to its value. This is useful in the case
# where the webview guest has crashed and navigating to the same address