Changeset 70149 in webkit
- Timestamp:
- Oct 20, 2010 8:56:03 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r70147 r70149 1 2010-10-19 Leandro Gracia Gil <leandrogracia@google.com> 2 3 Reviewed by Jeremy Orlow. 4 5 Added a layout test for the language tag in speech input. Updated 6 the speech button tests to include the new language parameter in the 7 mock result. 8 https://bugs.webkit.org/show_bug.cgi?id=47089 9 10 * fast/speech/input-text-language-tag-expected.txt: Added. 11 * fast/speech/input-text-language-tag.html: Added. 12 * fast/speech/input-text-speechbutton.html: Added an empty language 13 parameter. 14 * fast/speech/speech-button-ignore-generated-events.html: Added an 15 empty language parameter. 16 * platform/chromium/test_expectations.txt: language tag test is expected 17 to fail until the chromium-side patch has been applied. 18 1 19 2010-10-19 Antonio Gomes <agomes@rim.com> 2 20 -
trunk/LayoutTests/fast/speech/input-text-speechbutton.html
r69100 r70149 33 33 function run() { 34 34 if (window.layoutTestController && window.eventSender) { 35 layoutTestController.setMockSpeechInputResult('Pictures of the moon' );35 layoutTestController.setMockSpeechInputResult('Pictures of the moon', ''); 36 36 37 37 // Clicking the speech button should fill in mock speech-recognized text. -
trunk/LayoutTests/fast/speech/speech-button-ignore-generated-events.html
r69100 r70149 50 50 if (window.layoutTestController && window.eventSender) { 51 51 // Running in DRT, test the eventSender case. 52 layoutTestController.setMockSpeechInputResult('Pictures of the moon' );52 layoutTestController.setMockSpeechInputResult('Pictures of the moon', ''); 53 53 document.getElementById('speechInput').onwebkitspeechchange = function() { 54 54 shouldBeEqualToString('document.getElementById("speechInput").value', 'Pictures of the moon'); -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r70147 r70149 3243 3243 // r69833, JSC/V8 Date parsing differences 3244 3244 BUGJAPHET : fast/js/date-parse-test.html = TEXT 3245 3246 // Temporarily disabled for a 4-sided patch. Will be enabled again by BUGWK47420. 3247 BUGWK47089 : fast/speech/input-text-language-tag.html = FAIL -
trunk/WebCore/ChangeLog
r70143 r70149 1 2010-10-19 Leandro Gracia Gil <leandrogracia@google.com> 2 3 Reviewed by Jeremy Orlow. 4 5 Patch the current speech input implementation to use and validate the 6 nearest language tag. The language is now passed to the startRecognition 7 methods so that language-specific recognition could be used. Also added 8 a second parameter to setMockSpeechInputResult for the language used in 9 speech recognition. 10 https://bugs.webkit.org/show_bug.cgi?id=47089 11 12 This is the 2nd of a 4-sided patch in Chromium and WebKit. For more 13 details see http://codereview.chromium.org/3615005/show and 14 http://codereview.chromium.org/3595018/show. 15 16 Test: fast/speech/input-text-language-tag.html 17 18 * dom/Element.cpp: 19 (WebCore::Element::computeInheritedLanguage): includes a brief character 20 validation for the BCP 47 language tag. 21 * page/SpeechInput.cpp: 22 (WebCore::SpeechInput::startRecognition): 23 * page/SpeechInput.h: 24 * page/SpeechInputClient.h: 25 * platform/mock/SpeechInputClientMock.cpp: 26 (WebCore::SpeechInputClientMock::startRecognition): 27 (WebCore::SpeechInputClientMock::setRecognitionResult): results are now 28 stored by language using a hash map. 29 (WebCore::SpeechInputClientMock::timerFired): 30 * platform/mock/SpeechInputClientMock.h: 31 * rendering/TextControlInnerElements.cpp: 32 (WebCore::TextControlInnerElement::attachInnerElement): 33 (WebCore::SearchFieldCancelButtonElement::detach): 34 (WebCore::SpinButtonElement::defaultEventHandler): 35 (WebCore::InputFieldSpeechButtonElement::defaultEventHandler): 36 (WebCore::InputFieldSpeechButtonElement::detach): 37 1 38 2010-10-20 Dirk Schulze <krit@webkit.org> 2 39 -
trunk/WebCore/dom/Element.cpp
r69868 r70149 57 57 #include "TextIterator.h" 58 58 #include "XMLNames.h" 59 #include <wtf/ASCIICType.h> 59 60 #include <wtf/text/CString.h> 60 61 … … 1475 1476 } 1476 1477 1478 if (!value.isNull() && !value.isEmpty()) { 1479 // Only A-Za-z0-9 and '-' are allowed in the language tag (see BCP 47) 1480 const char *p = value.string().ascii().data(); 1481 for (; *p != '\0'; ++p) { 1482 if (!isASCIIAlphanumeric(*p) && *p != '-') 1483 return AtomicString(); 1484 } 1485 } 1486 1477 1487 return value; 1478 1488 } -
trunk/WebCore/page/SpeechInput.cpp
r66007 r70149 94 94 } 95 95 96 bool SpeechInput::startRecognition(int listenerId, const IntRect& elementRect)96 bool SpeechInput::startRecognition(int listenerId, const String& language, const IntRect& elementRect) 97 97 { 98 98 ASSERT(m_listeners.contains(listenerId)); 99 return m_client->startRecognition(listenerId, elementRect);99 return m_client->startRecognition(listenerId, language, elementRect); 100 100 } 101 101 -
trunk/WebCore/page/SpeechInput.h
r66007 r70149 62 62 63 63 // Methods invoked by the input elements. 64 bool startRecognition(int, const IntRect&);64 bool startRecognition(int, const String&, const IntRect&); 65 65 void stopRecording(int); 66 66 void cancelRecognition(int); -
trunk/WebCore/page/SpeechInputClient.h
r66007 r70149 32 32 #define SpeechInputClient_h 33 33 34 #include <wtf/Forward.h> 35 34 36 #if ENABLE(INPUT_SPEECH) 35 37 … … 49 51 50 52 // Starts speech recognition and audio recording. 51 virtual bool startRecognition(int requestId, const IntRect& elementRect) = 0;53 virtual bool startRecognition(int requestId, const String& language, const IntRect& elementRect) = 0; 52 54 53 55 // Stops audio recording and performs recognition with the audio recorded until now -
trunk/WebCore/platform/mock/SpeechInputClientMock.cpp
r66007 r70149 36 36 #include "SpeechInputListener.h" 37 37 38 namespace { 39 // HashMap doesn't support empty strings as keys, so this value (an invalid BCP47 tag) is used for those cases. 40 const String emptyLanguage = "_"; 41 } 42 38 43 namespace WebCore { 39 44 … … 51 56 } 52 57 53 bool SpeechInputClientMock::startRecognition(int requestId, const IntRect&)58 bool SpeechInputClientMock::startRecognition(int requestId, const String& language, const IntRect&) 54 59 { 55 60 if (m_timer.isActive()) … … 57 62 m_requestId = requestId; 58 63 m_recording = true; 64 m_language = language; 59 65 m_timer.startOneShot(0); 60 66 return true; … … 81 87 } 82 88 83 void SpeechInputClientMock::setRecognitionResult(const String& result )89 void SpeechInputClientMock::setRecognitionResult(const String& result, const String& language) 84 90 { 85 m_recognitionResult = result; 91 if (language.isEmpty()) 92 m_recognitionResult.set(emptyLanguage, result); 93 else 94 m_recognitionResult.set(language, result); 86 95 } 87 96 … … 93 102 m_timer.startOneShot(0); 94 103 } else { 95 m_listener->setRecognitionResult(m_requestId, m_recognitionResult); 104 String language = m_language.isEmpty() ? String(emptyLanguage) : m_language; 105 if (!m_recognitionResult.contains(language)) { 106 // Can't avoid setting a result on empty or invalid language strings. 107 // This would avoid generating the events used to check the results and the test would timeout. 108 String error("error: no result found for language '"); 109 error.append(m_language); 110 error.append("'"); 111 m_listener->setRecognitionResult(m_requestId, error); 112 } else 113 m_listener->setRecognitionResult(m_requestId, m_recognitionResult.get(language)); 114 96 115 m_listener->didCompleteRecognition(m_requestId); 97 116 m_requestId = 0; -
trunk/WebCore/platform/mock/SpeechInputClientMock.h
r66007 r70149 35 35 #include "SpeechInputClient.h" 36 36 #include "Timer.h" 37 #include <wtf/HashMap.h> 38 #include <wtf/text/StringHash.h> 37 39 38 40 #if ENABLE(INPUT_SPEECH) … … 47 49 SpeechInputClientMock(); 48 50 49 void setRecognitionResult(const String& result );51 void setRecognitionResult(const String& result, const String& language); 50 52 51 53 // SpeechInputClient methods. 52 54 void setListener(SpeechInputListener*); 53 bool startRecognition(int, const IntRect&);55 bool startRecognition(int, const String&, const IntRect&); 54 56 void stopRecording(int); 55 57 void cancelRecognition(int); … … 62 64 SpeechInputListener* m_listener; 63 65 int m_requestId; 64 String m_recognitionResult; 66 67 HashMap<String, String> m_recognitionResult; 68 String m_language; 65 69 }; 66 70 -
trunk/WebCore/rendering/TextControlInnerElements.cpp
r69100 r70149 22 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 25 */ 26 26 27 27 #include "config.h" 28 28 #include "TextControlInnerElements.h" … … 108 108 renderer->setStyle(style); 109 109 } 110 110 111 111 // Set these explicitly since this normally happens during an attach() 112 112 setAttached(); 113 113 setInDocument(); 114 114 115 115 // For elements without a shadow parent, add the node to the DOM normally. 116 116 if (!m_shadowParent) { … … 119 119 parent->deprecatedParserAddChild(this); 120 120 } 121 121 122 122 // Add the renderer to the render tree 123 123 if (renderer) … … 209 209 if (m_capturing) { 210 210 if (Frame* frame = document()->frame()) 211 frame->eventHandler()->setCapturingMouseEventsNode(0); 211 frame->eventHandler()->setCapturingMouseEventsNode(0); 212 212 } 213 213 TextControlInnerElement::detach(); … … 282 282 if (!event->defaultHandled()) 283 283 HTMLDivElement::defaultEventHandler(event); 284 return; 285 } 286 284 return; 285 } 286 287 287 HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowAncestorNode()); 288 288 if (input->disabled() || input->isReadOnlyFormControl()) { … … 432 432 switch (m_state) { 433 433 case Idle: 434 if (speechInput()->startRecognition(m_listenerId, input-> renderer()->absoluteBoundingBoxRect()))434 if (speechInput()->startRecognition(m_listenerId, input->computeInheritedLanguage(), input->renderer()->absoluteBoundingBoxRect())) 435 435 setState(Recording); 436 436 break; … … 488 488 if (m_capturing) { 489 489 if (Frame* frame = document()->frame()) 490 frame->eventHandler()->setCapturingMouseEventsNode(0); 490 frame->eventHandler()->setCapturingMouseEventsNode(0); 491 491 } 492 492 -
trunk/WebKit/chromium/ChangeLog
r70145 r70149 1 2010-10-19 Leandro Gracia Gil <leandrogracia@google.com> 2 3 Reviewed by Jeremy Orlow. 4 5 Patch the current speech input implementation to use and validate the 6 nearest language tag. The language is now passed to the startRecognition 7 methods so that language-specific recognition could be used. Also added 8 a second parameter to setMockSpeechInputResult for the language used in 9 speech recognition. 10 https://bugs.webkit.org/show_bug.cgi?id=47089 11 12 This is the 2nd of a 4-sided patch in Chromium and WebKit. For more 13 details see http://codereview.chromium.org/3615005/show and 14 http://codereview.chromium.org/3595018/show. 15 16 * public/WebSpeechInputController.h: 17 (WebKit::WebSpeechInputController::startRecognition): 18 * public/WebSpeechInputControllerMock.h: 19 * src/SpeechInputClientImpl.cpp: 20 (WebKit::SpeechInputClientImpl::create): 21 (WebKit::SpeechInputClientImpl::startRecognition): 22 * src/SpeechInputClientImpl.h: 23 * src/WebSpeechInputControllerMockImpl.cpp: 24 (WebKit::WebSpeechInputControllerMockImpl::setMockRecognitionResult): 25 (WebKit::WebSpeechInputControllerMockImpl::startRecognition): 26 * src/WebSpeechInputControllerMockImpl.h: 27 * src/WebViewImpl.cpp: 28 (WebKit::WebViewImpl::WebViewImpl): 29 * src/WebViewImpl.h: 30 1 31 2010-10-20 Dirk Schulze <krit@webkit.org> 2 32 -
trunk/WebKit/chromium/public/WebSpeechInputController.h
r66713 r70149 36 36 namespace WebKit { 37 37 38 class WebString; 38 39 struct WebRect; 39 40 … … 44 45 // runs to the limit or stopRecording is called. Progress indications and the recognized 45 46 // text are returned via the listener interface. 46 virtual bool startRecognition(int requestId, const Web Rect&)47 virtual bool startRecognition(int requestId, const WebString& language, const WebRect& elementRect) 47 48 { 48 49 WEBKIT_ASSERT_NOT_REACHED(); -
trunk/WebKit/chromium/public/WebSpeechInputControllerMock.h
r64907 r70149 45 45 virtual ~WebSpeechInputControllerMock() { } 46 46 47 virtual void setMockRecognitionResult(const WebString& result, const WebString& language) = 0; 48 49 // FIXME: this is a fix for a two-sided patch. Delete as soon as the chromium side is patched. 50 // Chromium patch not uploaded yet, but will depend on http://codereview.chromium.org/3615005/show patch. 47 51 virtual void setMockRecognitionResult(const WebString& result) = 0; 48 52 }; -
trunk/WebKit/chromium/src/SpeechInputClientImpl.cpp
r66007 r70149 33 33 34 34 #include "PlatformString.h" 35 #include "SpeechInputListener.h" 35 36 #include "WebSpeechInputController.h" 36 37 #include "WebString.h" 37 38 #include "WebViewClient.h" 38 #include "page/SpeechInputListener.h"39 #include <wtf/PassOwnPtr.h> 39 40 40 41 #if ENABLE(INPUT_SPEECH) 41 42 42 43 namespace WebKit { 44 45 PassOwnPtr<SpeechInputClientImpl> SpeechInputClientImpl::create(WebViewClient* client) 46 { 47 return adoptPtr(new SpeechInputClientImpl(client)); 48 } 43 49 44 50 SpeechInputClientImpl::SpeechInputClientImpl(WebViewClient* web_view_client) … … 57 63 } 58 64 59 bool SpeechInputClientImpl::startRecognition(int requestId, const WebCore::IntRect& elementRect)65 bool SpeechInputClientImpl::startRecognition(int requestId, const String& language, const WebCore::IntRect& elementRect) 60 66 { 61 67 ASSERT(m_listener); 62 return m_controller->startRecognition(requestId, elementRect);68 return m_controller->startRecognition(requestId, language, elementRect); 63 69 } 64 70 -
trunk/WebKit/chromium/src/SpeechInputClientImpl.h
r66007 r70149 34 34 #if ENABLE(INPUT_SPEECH) 35 35 36 #include "SpeechInputClient.h" 36 37 #include "WebSpeechInputListener.h" 37 #include "page/SpeechInputClient.h" 38 #include <wtf/Forward.h> 39 #include <wtf/OwnPtr.h> 40 #include <wtf/PassOwnPtr.h> 41 42 namespace WTF { 43 class String; 44 } 38 45 39 46 namespace WebCore { … … 50 57 public WebSpeechInputListener { 51 58 public: 52 SpeechInputClientImpl(WebViewClient*);59 static PassOwnPtr<SpeechInputClientImpl> create(WebViewClient*); 53 60 virtual ~SpeechInputClientImpl(); 54 61 55 62 // SpeechInputClient methods. 56 63 void setListener(WebCore::SpeechInputListener*); 57 bool startRecognition(int, const WebCore::IntRect&);64 bool startRecognition(int, const String&, const WebCore::IntRect&); 58 65 void stopRecording(int); 59 66 void cancelRecognition(int); … … 65 72 66 73 private: 74 SpeechInputClientImpl(WebViewClient*); 75 67 76 WebSpeechInputController* m_controller; // To call into the embedder. 68 77 WebCore::SpeechInputListener* m_listener; -
trunk/WebKit/chromium/src/WebSpeechInputControllerMockImpl.cpp
r66007 r70149 58 58 void WebSpeechInputControllerMockImpl::setMockRecognitionResult(const WebString& result) 59 59 { 60 m_webcoreMock->setRecognitionResult(result); 60 m_webcoreMock->setRecognitionResult(result, WebString::fromUTF8("")); 61 } 62 63 void WebSpeechInputControllerMockImpl::setMockRecognitionResult(const WebString& result, const WebString &language) 64 { 65 m_webcoreMock->setRecognitionResult(result, language); 61 66 } 62 67 … … 76 81 } 77 82 78 bool WebSpeechInputControllerMockImpl::startRecognition(int requestId, const Web Rect& elementRect)83 bool WebSpeechInputControllerMockImpl::startRecognition(int requestId, const WebString& language, const WebRect& elementRect) 79 84 { 80 return m_webcoreMock->startRecognition(requestId, elementRect);85 return m_webcoreMock->startRecognition(requestId, language, elementRect); 81 86 } 82 87 -
trunk/WebKit/chromium/src/WebSpeechInputControllerMockImpl.h
r66007 r70149 38 38 #include <wtf/OwnPtr.h> 39 39 40 namespace WTF { 41 class String; 42 } 43 40 44 namespace WebCore { 41 45 class SpeechInputClientMock; … … 58 62 59 63 // WebSpeechInputController methods. 60 bool startRecognition(int requestId, const Web Rect& elementRect);64 bool startRecognition(int requestId, const WebString& language, const WebRect& elementRect); 61 65 void cancelRecognition(int requestId); 62 66 void stopRecording(int requestId); 63 67 64 68 // WebSpeechInputControllerMock methods. 69 void setMockRecognitionResult(const WebString& result, const WebString& language); 70 71 // FIXME: this is a fix for a two-sided patch. Delete as soon as the chromium side is patched. 72 // Chromium patch not uploaded yet, but will depend on http://codereview.chromium.org/3615005/show patch. 65 73 void setMockRecognitionResult(const WebString& result); 66 74 … … 73 81 74 82 #endif // WebSpeechInputControllerMockImpl_h 75 -
trunk/WebKit/chromium/src/WebViewImpl.cpp
r70143 r70149 89 89 #include "SelectionController.h" 90 90 #include "Settings.h" 91 #include "SpeechInputClientImpl.h" 91 92 #include "Timer.h" 92 93 #include "TypingCommand.h" … … 276 277 #endif 277 278 #if ENABLE(INPUT_SPEECH) 278 , m_speechInputClient( client)279 , m_speechInputClient(SpeechInputClientImpl::create(client)) 279 280 #endif 280 281 , m_deviceOrientationClientProxy(new DeviceOrientationClientProxy(client ? client->deviceOrientationClient() : 0)) … … 299 300 pageClients.inspectorClient = &m_inspectorClientImpl; 300 301 #if ENABLE(INPUT_SPEECH) 301 pageClients.speechInputClient = &m_speechInputClient;302 pageClients.speechInputClient = m_speechInputClient.get(); 302 303 #endif 303 304 pageClients.deviceOrientationClient = m_deviceOrientationClientProxy.get(); -
trunk/WebKit/chromium/src/WebViewImpl.h
r69624 r70149 50 50 #include "LayerRendererChromium.h" 51 51 #include "NotificationPresenterImpl.h" 52 #include "SpeechInputClientImpl.h"53 52 #include <wtf/OwnPtr.h> 54 53 #include <wtf/RefCounted.h> … … 75 74 class DeviceOrientationClientProxy; 76 75 class DragScrollTimer; 76 class SpeechInputClientImpl; 77 77 class WebAccessibilityObject; 78 78 class WebDevToolsAgentClient; … … 544 544 545 545 #if ENABLE(INPUT_SPEECH) 546 SpeechInputClientImplm_speechInputClient;546 OwnPtr<SpeechInputClientImpl> m_speechInputClient; 547 547 #endif 548 548 // If we attempt to fetch the on-screen GraphicsContext3D before -
trunk/WebKitTools/ChangeLog
r70128 r70149 1 2010-10-19 Leandro Gracia Gil <leandrogracia@google.com> 2 3 Reviewed by Jeremy Orlow. 4 5 Added a second parameter to setMockSpeechInputResult for 6 the language used in speech input. 7 https://bugs.webkit.org/show_bug.cgi?id=47089 8 9 * DumpRenderTree/LayoutTestController.cpp: 10 (setMockSpeechInputResultCallback): 11 * DumpRenderTree/LayoutTestController.h: 12 * DumpRenderTree/chromium/LayoutTestController.cpp: 13 (LayoutTestController::setMockSpeechInputResult): 14 * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: 15 (LayoutTestController::setMockSpeechInputResult): 16 1 17 2010-10-19 Adam Roben <aroben@apple.com> 2 18 -
trunk/WebKitTools/DumpRenderTree/LayoutTestController.cpp
r69952 r70149 1071 1071 static JSValueRef setMockSpeechInputResultCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) 1072 1072 { 1073 if (argumentCount < 1)1073 if (argumentCount < 2) 1074 1074 return JSValueMakeUndefined(context); 1075 1075 … … 1077 1077 ASSERT(!*exception); 1078 1078 1079 LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); 1080 controller->setMockSpeechInputResult(result.get()); 1079 JSRetainPtr<JSStringRef> language(Adopt, JSValueToStringCopy(context, arguments[1], exception)); 1080 ASSERT(!*exception); 1081 1082 LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); 1083 controller->setMockSpeechInputResult(result.get(), language.get()); 1081 1084 1082 1085 return JSValueMakeUndefined(context); -
trunk/WebKitTools/DumpRenderTree/LayoutTestController.h
r69952 r70149 95 95 void setMockGeolocationError(int code, JSStringRef message); 96 96 void setMockGeolocationPosition(double latitude, double longitude, double accuracy); 97 void setMockSpeechInputResult(JSStringRef result );97 void setMockSpeechInputResult(JSStringRef result, JSStringRef languageTag); 98 98 void setPersistentUserStyleSheetLocation(JSStringRef path); 99 99 void setPluginsEnabled(bool flag); -
trunk/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
r70064 r70149 1527 1527 { 1528 1528 result->setNull(); 1529 if (arguments.size() < 1 || !arguments[0].isString())1530 return; 1531 1532 m_speechInputControllerMock->setMockRecognitionResult(cppVariantToWebString(arguments[0]) );1529 if (arguments.size() < 2 || !arguments[0].isString() || !arguments[1].isString()) 1530 return; 1531 1532 m_speechInputControllerMock->setMockRecognitionResult(cppVariantToWebString(arguments[0]), cppVariantToWebString(arguments[1])); 1533 1533 } 1534 1534 -
trunk/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
r70039 r70149 501 501 } 502 502 503 void LayoutTestController::setMockSpeechInputResult(JSStringRef result )503 void LayoutTestController::setMockSpeechInputResult(JSStringRef result, JSStringRef language) 504 504 { 505 505 // FIXME: Implement for speech input layout tests.
Note: See TracChangeset
for help on using the changeset viewer.