diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-06 20:09:34 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-06 20:09:34 +0000 |
commit | e87756663c751faea164d8deddbfccbfbbb1cfca (patch) | |
tree | 269ac3d28f509b63046674aa1c1204288bf2292b /webkit | |
parent | 120671afa85fa5bcbe689c5078d0eeb6449b3b6d (diff) | |
download | chromium_src-e87756663c751faea164d8deddbfccbfbbb1cfca.zip chromium_src-e87756663c751faea164d8deddbfccbfbbb1cfca.tar.gz chromium_src-e87756663c751faea164d8deddbfccbfbbb1cfca.tar.bz2 |
Reverting the autofill popu CL as it creates perf regression.
TBR=nsylvain
Review URL: http://codereview.chromium.org/9460
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4908 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/build/glue/glue.vcproj | 8 | ||||
-rw-r--r-- | webkit/build/port/port.vcproj | 4 | ||||
-rw-r--r-- | webkit/glue/SConscript | 1 | ||||
-rw-r--r-- | webkit/glue/autocomplete_input_listener.h | 1 | ||||
-rw-r--r-- | webkit/glue/chrome_client_impl.cc | 8 | ||||
-rw-r--r-- | webkit/glue/chrome_client_impl.h | 11 | ||||
-rw-r--r-- | webkit/glue/form_autocomplete_listener.cc | 37 | ||||
-rw-r--r-- | webkit/glue/form_autocomplete_listener.h | 46 | ||||
-rw-r--r-- | webkit/glue/password_autocomplete_listener.cc | 1 | ||||
-rw-r--r-- | webkit/glue/webframeloaderclient_impl.cc | 133 | ||||
-rw-r--r-- | webkit/glue/webframeloaderclient_impl.h | 8 | ||||
-rw-r--r-- | webkit/glue/webplugin_impl_mac.mm | 3 | ||||
-rw-r--r-- | webkit/glue/webview.h | 7 | ||||
-rw-r--r-- | webkit/glue/webview_delegate.h | 11 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 213 | ||||
-rw-r--r-- | webkit/glue/webview_impl.h | 16 | ||||
-rw-r--r-- | webkit/port/page/chromium/ChromeClientChromium.h | 6 | ||||
-rw-r--r-- | webkit/port/platform/chromium/PopupMenuChromium.cpp | 133 | ||||
-rw-r--r-- | webkit/port/platform/chromium/PopupMenuChromium.h | 82 |
19 files changed, 130 insertions, 599 deletions
diff --git a/webkit/build/glue/glue.vcproj b/webkit/build/glue/glue.vcproj index dcae341..879bf66 100644 --- a/webkit/build/glue/glue.vcproj +++ b/webkit/build/glue/glue.vcproj @@ -381,14 +381,6 @@ > </File> <File - RelativePath="..\..\glue\form_autocomplete_listener.cc" - > - </File> - <File - RelativePath="..\..\glue\form_autocomplete_listener.h" - > - </File> - <File RelativePath="..\..\glue\glue_accessibility.cc" > </File> diff --git a/webkit/build/port/port.vcproj b/webkit/build/port/port.vcproj index b18530a..3a42435 100644 --- a/webkit/build/port/port.vcproj +++ b/webkit/build/port/port.vcproj @@ -807,10 +807,6 @@ > </File> <File - RelativePath="..\..\port\platform\chromium\PopupMenuChromium.h" - > - </File> - <File RelativePath="..\..\port\platform\chromium\SearchPopupMenuChromium.cpp" > </File> diff --git a/webkit/glue/SConscript b/webkit/glue/SConscript index 0870d6b..c82a3c8 100644 --- a/webkit/glue/SConscript +++ b/webkit/glue/SConscript @@ -35,7 +35,6 @@ input_files = [ 'editor_client_impl.cc', 'entity_map.cc', 'event_conversion.cc', - 'form_autocomplete_listener.cc', 'feed_preview.cc', 'glue_util.cc', 'glue_serialize.cc', diff --git a/webkit/glue/autocomplete_input_listener.h b/webkit/glue/autocomplete_input_listener.h index fe412f1..3b92b86 100644 --- a/webkit/glue/autocomplete_input_listener.h +++ b/webkit/glue/autocomplete_input_listener.h @@ -16,6 +16,7 @@ MSVC_PUSH_WARNING_LEVEL(0); #include "EventListener.h" MSVC_POP_WARNING(); +#undef LOG #include "base/basictypes.h" #include "base/scoped_ptr.h" diff --git a/webkit/glue/chrome_client_impl.cc b/webkit/glue/chrome_client_impl.cc index 081d4c7..387f307 100644 --- a/webkit/glue/chrome_client_impl.cc +++ b/webkit/glue/chrome_client_impl.cc @@ -449,14 +449,12 @@ void ChromeClientImpl::runFileChooser(const WebCore::String& default_path, delegate->RunFileChooser(suggestion, chooser); } -void ChromeClientImpl::popupOpened(WebCore::FramelessScrollView* popup_view, - const WebCore::IntRect& bounds, - bool focus_on_show) { +void ChromeClientImpl::popupOpened( + WebCore::FramelessScrollView* popup_view, const WebCore::IntRect& bounds) { WebViewDelegate* d = webview_->delegate(); if (d) { WebWidgetImpl* webwidget = - static_cast<WebWidgetImpl*>(d->CreatePopupWidget(webview_, - focus_on_show)); + static_cast<WebWidgetImpl*>(d->CreatePopupWidget(webview_)); webwidget->Init(popup_view, webkit_glue::FromIntRect(bounds)); } } diff --git a/webkit/glue/chrome_client_impl.h b/webkit/glue/chrome_client_impl.h index 706fedb..88cf83c 100644 --- a/webkit/glue/chrome_client_impl.h +++ b/webkit/glue/chrome_client_impl.h @@ -80,7 +80,7 @@ public: const WebCore::String& message, const WebCore::String& defaultValue, WebCore::String& result); - + virtual void setStatusbarText(const WebCore::String&); virtual bool shouldInterruptJavaScript(); @@ -92,7 +92,7 @@ public: virtual bool tabsToLinks() const; virtual WebCore::IntRect windowResizerRect() const; - + virtual void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false); virtual void scroll(const WebCore::IntSize& scrollDelta, @@ -101,7 +101,7 @@ public: virtual WebCore::IntPoint screenToWindow(const WebCore::IntPoint&) const; virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&) const; virtual PlatformWidget platformWindow() const; - + virtual void mouseDidMoveOverElement(const WebCore::HitTestResult& result, unsigned modifierFlags); @@ -115,9 +115,8 @@ public: virtual void runFileChooser(const WebCore::String&, PassRefPtr<WebCore::FileChooser>); virtual void popupOpened(WebCore::FramelessScrollView* popup_view, - const WebCore::IntRect& bounds, - bool focus_on_show); - + const WebCore::IntRect& bounds); + void SetCursor(const WebCursor& cursor); private: diff --git a/webkit/glue/form_autocomplete_listener.cc b/webkit/glue/form_autocomplete_listener.cc deleted file mode 100644 index aaaf0f70..0000000 --- a/webkit/glue/form_autocomplete_listener.cc +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "config.h" - -#include "webkit/glue/form_autocomplete_listener.h" - -MSVC_PUSH_WARNING_LEVEL(0); -#include "HTMLInputElement.h" -MSVC_POP_WARNING(); - -#undef LOG - -#include "webkit/glue/autocomplete_input_listener.h" -#include "webkit/glue/glue_util.h" -#include "webkit/glue/webview_delegate.h" - -namespace webkit_glue { - -FormAutocompleteListener::FormAutocompleteListener( - WebViewDelegate* webview_delegate, - WebCore::HTMLInputElement* input_element) - : AutocompleteInputListener(new HTMLInputDelegate(input_element)), - webview_delegate_(webview_delegate), - name_(webkit_glue::StringToStdWString(input_element->name().string())), - node_id_(reinterpret_cast<int64>(input_element)) { - DCHECK(input_element->isTextField() && !input_element->isPasswordField() && - input_element->autoComplete()); -} - -void FormAutocompleteListener::OnInlineAutocompleteNeeded( - const std::wstring& user_input) { - webview_delegate_->QueryFormFieldAutofill(name_, user_input, node_id_); -} - -} // namespace diff --git a/webkit/glue/form_autocomplete_listener.h b/webkit/glue/form_autocomplete_listener.h deleted file mode 100644 index e55522e..0000000 --- a/webkit/glue/form_autocomplete_listener.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef WEBKIT_GLUE_FORM_AUTOCOMPLETE_LISTENER_ -#define WEBKIT_GLUE_FORM_AUTOCOMPLETE_LISTENER_ - -#include <string> - -#include "webkit/glue/autocomplete_input_listener.h" - -class WebViewDelegate; - -namespace webkit_glue { - -// This class listens for the user typing in a text input in a form and queries -// the browser for autofill information. - -class FormAutocompleteListener : public AutocompleteInputListener { - public: - FormAutocompleteListener(WebViewDelegate* webview_delegate, - WebCore::HTMLInputElement* input_element); - virtual ~FormAutocompleteListener() { } - - // AutocompleteInputListener implementation. - virtual void OnBlur(const std::wstring& user_input) { } - virtual void OnInlineAutocompleteNeeded(const std::wstring& user_input); - - private: - // The delegate associated with the WebView that contains thhe input we are - // listening to. - WebViewDelegate* webview_delegate_; - - // The name of the input node we are listening to. - std::wstring name_; - - // An id to represent the input element. That ID is passed to the call that - // queries for suggestions. - int64 node_id_; - - DISALLOW_COPY_AND_ASSIGN(FormAutocompleteListener); -}; - -} // webkit_glue - -#endif // WEBKIT_GLUE_FORM_AUTOCOMPLETE_LISTENER_ diff --git a/webkit/glue/password_autocomplete_listener.cc b/webkit/glue/password_autocomplete_listener.cc index 0a88ab3..aaf6125 100644 --- a/webkit/glue/password_autocomplete_listener.cc +++ b/webkit/glue/password_autocomplete_listener.cc @@ -6,7 +6,6 @@ // component. #include "webkit/glue/password_autocomplete_listener.h" -#undef LOG #include "base/logging.h" namespace webkit_glue { diff --git a/webkit/glue/webframeloaderclient_impl.cc b/webkit/glue/webframeloaderclient_impl.cc index 698d1a7..8138900 100644 --- a/webkit/glue/webframeloaderclient_impl.cc +++ b/webkit/glue/webframeloaderclient_impl.cc @@ -16,9 +16,6 @@ MSVC_PUSH_WARNING_LEVEL(0); #include "Element.h" #include "HistoryItem.h" #include "HTMLFormElement.h" // needed by FormState.h -#include "HTMLFormControlElement.h" -#include "HTMLInputElement.h" -#include "HTMLNames.h" #include "FormState.h" #include "FrameLoader.h" #include "FrameLoadRequest.h" @@ -42,9 +39,8 @@ MSVC_POP_WARNING(); #if defined(OS_WIN) #include "webkit/activex_shim/activex_shared.h" #endif +#include "webkit/glue/webframeloaderclient_impl.h" #include "webkit/glue/alt_404_page_resource_fetcher.h" -#include "webkit/glue/autocomplete_input_listener.h" -#include "webkit/glue/form_autocomplete_listener.h" #include "webkit/glue/glue_util.h" #include "webkit/glue/password_form_dom_manager.h" #include "webkit/glue/plugins/plugin_list.h" @@ -52,7 +48,6 @@ MSVC_POP_WARNING(); #include "webkit/glue/webdatasource_impl.h" #include "webkit/glue/webdocumentloader_impl.h" #include "webkit/glue/weberror_impl.h" -#include "webkit/glue/webframeloaderclient_impl.h" #include "webkit/glue/webhistoryitem_impl.h" #include "webkit/glue/webkit_glue.h" #include "webkit/glue/webplugin_impl.h" @@ -248,7 +243,7 @@ void WebFrameLoaderClient::dispatchDidReceiveResponse(DocumentLoader* loader, }*/ // When the frame request first 404's, chrome may replace it with the alternate - // 404 page's contents. It does this using substitute data in the document + // 404 page's contents. It does this using substitute data in the document // loader, so the original response and url of the request can be preserved. // We need to avoid replacing the current page, if it has already been // replaced (otherwise could loop on setting alt-404 page!) @@ -351,34 +346,19 @@ void WebFrameLoaderClient::dispatchDidFinishDocumentLoad() { if (item) { WebCore::HTMLFormElement* form = static_cast<WebCore::HTMLFormElement*>(item); - + // Honour autocomplete=off. if (!form->autoComplete()) continue; - std::set<std::wstring> password_related_fields; scoped_ptr<PasswordForm> data( PasswordFormDomManager::CreatePasswordForm(form)); - if (data.get()) { + if (data.get()) actions.push_back(*data); - // Let's remember the names of password related fields so we do not - // autofill them with the regular form autofill. - if (!data->username_element.empty()) - password_related_fields.insert(data->username_element); - DCHECK(!data->password_element.empty()); - password_related_fields.insert(data->password_element); - if (!data->old_password_element.empty()) - password_related_fields.insert(data->old_password_element); - } - - // Now let's register for any text input. - // TODO(jcampan): bug #3847 merge password and form autofill so we - // traverse the form elements only once. - RegisterAutofillListeners(form, password_related_fields); } } - if (d && (actions.size() > 0)) + if (d && (actions.size() > 0)) d->OnPasswordFormsSeen(webview, actions); if (d) d->DidFinishDocumentLoadForFrame(webview, webframe_); @@ -445,15 +425,15 @@ void WebFrameLoaderClient::dispatchDidHandleOnloadEvents() { // dispatchDidCancelClientRedirect() -> clears expected redirect // dispatchDidCommitLoad() -> DISPATCHES // -// Client redirect (cancelled) +// Client redirect (cancelled) // (e.g meta-refresh trumped by manual doc.location change, or just cancelled // because a link was clicked that requires the meta refresh to be rescheduled // (the SOURCE URL may have changed). // --------------------------- // dispatchDidCancelClientRedirect() -> clears expected redirect -// dispatchDidStartProvisionalLoad() -> adds only URL to redirect list -// dispatchDidCommitLoad() -> DISPATCHES & clears list -// rescheduled ? dispatchWillPerformClientRedirect() -> saves expected redirect +// dispatchDidStartProvisionalLoad() -> adds only URL to redirect list +// dispatchDidCommitLoad() -> DISPATCHES & clears list +// rescheduled ? dispatchWillPerformClientRedirect() -> saves expected redirect // : nothing // Client redirect (failure) @@ -489,7 +469,7 @@ void WebFrameLoaderClient::dispatchDidHandleOnloadEvents() { // dispatchDidStartProvisionalLoad() -> adds 1#anchor source // dispatchDidCommitLoad() -> DISPATCHES 1#anchor // dispatchWillPerformClientRedirect() -> saves exp. source (1#anchor) -// -- redirect timer fires +// -- redirect timer fires // dispatchDidStartProvisionalLoad() -> appends 1#anchor (src) and 1 (dest) // dispatchDidCancelClientRedirect() -> clears expected redirect // dispatchDidCommitLoad() -> DISPATCHES 1#anchor + 1 @@ -580,20 +560,20 @@ void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage() { GURL url = ds->GetRequest().GetURL(); GURL chain_end = ds->GetRedirectChain().back(); ds->ClearRedirectChain(); - + // Figure out if this location change is because of a JS-initiated client - // redirect (e.g onload/setTimeout document.location.href=). + // redirect (e.g onload/setTimeout document.location.href=). // TODO(timsteele): (bugs 1085325, 1046841) We don't get proper redirect // performed/cancelled notifications across anchor navigations, so the - // other redirect-tracking code in this class (see dispatch*ClientRedirect() - // and dispatchDidStartProvisionalLoad) is insufficient to catch and - // properly flag these transitions. Once a proper fix for this bug is + // other redirect-tracking code in this class (see dispatch*ClientRedirect() + // and dispatchDidStartProvisionalLoad) is insufficient to catch and + // properly flag these transitions. Once a proper fix for this bug is // identified and applied the following block may no longer be required. bool was_client_redirect = ((url == expected_client_redirect_dest_) && (chain_end == expected_client_redirect_src_)) || (NavigationGestureForLastLoad() == NavigationGestureAuto); - + if (was_client_redirect) { if (d) d->DidCompleteClientRedirect(webview, webframe_, chain_end); @@ -602,7 +582,7 @@ void WebFrameLoaderClient::dispatchDidChangeLocationWithinPage() { // completed it. expected_client_redirect_src_ = GURL(); expected_client_redirect_dest_ = GURL(); - } + } // Regardless of how we got here, we are navigating to a URL so we need to // add it to the redirect chain. @@ -668,10 +648,10 @@ void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() { // cleared by DidCancelClientRedirect. bool completing_client_redirect = false; if (expected_client_redirect_src_.is_valid()) { - // expected_client_redirect_dest_ could be something like + // expected_client_redirect_dest_ could be something like // "javascript:history.go(-1)" thus we need to exclude url starts with // "javascript:". See bug: 1080873 - DCHECK(expected_client_redirect_dest_.SchemeIs("javascript") || + DCHECK(expected_client_redirect_dest_.SchemeIs("javascript") || expected_client_redirect_dest_ == url); ds->AppendRedirect(expected_client_redirect_src_); completing_client_redirect = true; @@ -687,7 +667,7 @@ void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() { d->DidStartProvisionalLoadForFrame(webview, webframe_, NavigationGestureForLastLoad()); if (completing_client_redirect) - d->DidCompleteClientRedirect(webview, webframe_, + d->DidCompleteClientRedirect(webview, webframe_, expected_client_redirect_src_); } @@ -699,47 +679,13 @@ void WebFrameLoaderClient::dispatchDidStartProvisionalLoad() { NavigationGesture WebFrameLoaderClient::NavigationGestureForLastLoad() { // TODO(timsteele): userGestureHint returns too many false positives // (see bug 1051891) to trust it and assign NavigationGestureUser, so - // for now we assign Unknown in those cases and Auto otherwise. + // for now we assign Unknown in those cases and Auto otherwise. // (Issue 874811 known false negative as well). - return webframe_->frame()->loader()->userGestureHint() ? - NavigationGestureUnknown : + return webframe_->frame()->loader()->userGestureHint() ? + NavigationGestureUnknown : NavigationGestureAuto; } -void WebFrameLoaderClient::RegisterAutofillListeners( - WebCore::HTMLFormElement* form, - const std::set<std::wstring>& excluded_fields) { - - WebViewDelegate* webview_delegate = webframe_->webview_impl()->delegate(); - if (!webview_delegate) - return; - - for (size_t i = 0; i < form->formElements.size(); i++) { - WebCore::HTMLFormControlElement* form_element = form->formElements[i]; - if (!form_element->hasLocalName(WebCore::HTMLNames::inputTag)) - continue; - - WebCore::HTMLInputElement* input_element = - static_cast<WebCore::HTMLInputElement*>(form_element); - if (!input_element->isEnabled() || !input_element->isTextField() || - input_element->isPasswordField() || !input_element->autoComplete()) { - continue; - } - - std::wstring name = webkit_glue::StringToStdWString(input_element->name()); - if (excluded_fields.find(name) != excluded_fields.end()) - continue; - -#if !defined(OS_MACOSX) - // FIXME on Mac - webkit_glue::FormAutocompleteListener* listener = - new webkit_glue::FormAutocompleteListener(webview_delegate, - input_element); - webkit_glue::AttachForInlineAutocomplete(input_element, listener); -#endif - } -} - void WebFrameLoaderClient::dispatchDidReceiveTitle(const String& title) { WebViewImpl* webview = webframe_->webview_impl(); WebViewDelegate* d = webview->delegate(); @@ -965,7 +911,7 @@ void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction( disposition = d->DispositionForNavigationAction( wv, webframe_, &ds->GetRequest(), webnav_type, disposition, is_redirect); - + if (disposition != IGNORE_ACTION) { if (disposition == CURRENT_TAB) { policy_action = PolicyUse; @@ -1008,7 +954,7 @@ void WebFrameLoaderClient::dispatchWillSubmitForm(FramePolicyFunction function, // Don't free the SearchableFormData, the loader will do that. loader->set_searchable_form_data(form_data); - PasswordForm* pass_data = + PasswordForm* pass_data = PasswordFormDomManager::CreatePasswordForm(form_ref->form()); // Don't free the PasswordFormData, the loader will do that. loader->set_password_form_data(pass_data); @@ -1026,7 +972,7 @@ void WebFrameLoaderClient::revertToProvisionalState(DocumentLoader*) { has_representation_ = true; } -void WebFrameLoaderClient::setMainDocumentError(DocumentLoader*, +void WebFrameLoaderClient::setMainDocumentError(DocumentLoader*, const ResourceError& error) { if (plugin_widget_) { if (sent_initial_response_to_plugin_) { @@ -1106,7 +1052,7 @@ void WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const char* dat webframe_->frame()->loader()->activeDocumentLoader()->response()); } plugin_widget_->didReceiveData(data, length); - } + } } void WebFrameLoaderClient::finishedLoading(DocumentLoader* dl) { @@ -1292,7 +1238,7 @@ void WebFrameLoaderClient::transitionToCommittedFromCachedPage(WebCore::CachedPa } // Called when the FrameLoader goes into a state in which a new page load -// will occur. +// will occur. void WebFrameLoaderClient::transitionToCommittedForNewPage() { WebViewImpl* webview = webframe_->webview_impl(); WebViewDelegate* d = webview->delegate(); @@ -1319,16 +1265,16 @@ void WebFrameLoaderClient::download(ResourceHandle* handle, PassRefPtr<Frame> WebFrameLoaderClient::createFrame( const KURL& url, - const String& name, + const String& name, HTMLFrameOwnerElement* owner_element, - const String& referrer, + const String& referrer, bool allows_scrolling, - int margin_width, + int margin_width, int margin_height) { FrameLoadRequest frame_request(ResourceRequest(url, referrer), name); Frame* new_frame = NULL; - if (webframe_) + if (webframe_) webframe_->CreateChildFrame(frame_request, owner_element, allows_scrolling, margin_width, margin_height, new_frame); return new_frame; @@ -1393,7 +1339,7 @@ Widget* WebFrameLoaderClient::createPlugin(const IntSize& size, // TODO(erikkay) // We only allowed specific ActiveX controls to run from certain websites. if (!activex_shim::IsActiveXAllowed(clsid, url)) return NULL; - // We need to pass the combined clsid + version to PluginsList, so that it + // We need to pass the combined clsid + version to PluginsList, so that it // would detect if the requested version is installed. If not, it needs // to use the default plugin to update the control. if (!version.empty()) @@ -1419,7 +1365,7 @@ Widget* WebFrameLoaderClient::createPlugin(const IntSize& size, // TODO(erikkay) char **argv = NULL; int argc = 0; // There is a bug in Webkit which occurs when a plugin instance is defined - // with an OBJECT tag containing the "DATA" attribute". Please refer to the + // with an OBJECT tag containing the "DATA" attribute". Please refer to the // webkit issue http://bugs.webkit.org/show_bug.cgi?id=15457 for more info. // The code below is a patch which should be taken out when a fix is // available in webkit. The logic is to add the "src" attribute to the list @@ -1450,7 +1396,7 @@ Widget* WebFrameLoaderClient::createPlugin(const IntSize& size, // TODO(erikkay) } Widget* result = WebPluginImpl::Create(gurl, argn, argv, argc, element, - webframe_, plugin_delegate, + webframe_, plugin_delegate, load_manually); DeleteToArray(argn); @@ -1467,19 +1413,19 @@ void WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget) { } Widget* WebFrameLoaderClient::createJavaAppletWidget( - const IntSize& size, + const IntSize& size, Element *element, const KURL &url, const Vector<String> ¶m_names, const Vector<String> ¶m_values) { - return createPlugin(size, element, url, param_names, param_values, + return createPlugin(size, element, url, param_names, param_values, "application/x-java-applet", false); } ObjectContentType WebFrameLoaderClient::objectContentType( - const KURL& url, + const KURL& url, const String& explicit_mime_type) { // This code is based on Apple's implementation from - // WebCoreSupport/WebFrameBridge.mm. + // WebCoreSupport/WebFrameBridge.mm. String mime_type = explicit_mime_type; if (mime_type.isEmpty()) { @@ -1532,3 +1478,4 @@ bool WebFrameLoaderClient::ActionSpecifiesDisposition( *disposition = shift ? NEW_WINDOW : SAVE_TO_DISK; return true; } + diff --git a/webkit/glue/webframeloaderclient_impl.h b/webkit/glue/webframeloaderclient_impl.h index 6010ba8..20b12ee 100644 --- a/webkit/glue/webframeloaderclient_impl.h +++ b/webkit/glue/webframeloaderclient_impl.h @@ -5,8 +5,6 @@ #ifndef WEBKIT_GLUE_WEBFRAMELOADERCLIENT_IMPL_H__ #define WEBKIT_GLUE_WEBFRAMELOADERCLIENT_IMPL_H__ -#include <set> - #include "base/compiler_specific.h" MSVC_PUSH_WARNING_LEVEL(0); @@ -20,7 +18,6 @@ MSVC_POP_WARNING(); namespace WebCore { class Frame; -class HTMLFormElement; class Widget; } @@ -212,11 +209,6 @@ class WebFrameLoaderClient : public WebCore::FrameLoaderClient { // otherwise returns NavigationGestureUnknown. NavigationGesture NavigationGestureForLastLoad(); - // Registers the text input fields in the passed form for autofill, with the - // exclusion of any field whose name is contained in |excluded_fields|. - void RegisterAutofillListeners(WebCore::HTMLFormElement* form, - const std::set<std::wstring>& excluded_fields); - // The WebFrame that owns this object and manages its lifetime. Therefore, // the web frame object is guaranteed to exist. WebFrameImpl* webframe_; diff --git a/webkit/glue/webplugin_impl_mac.mm b/webkit/glue/webplugin_impl_mac.mm index 1a420ea..191ebb7 100644 --- a/webkit/glue/webplugin_impl_mac.mm +++ b/webkit/glue/webplugin_impl_mac.mm @@ -4,9 +4,6 @@ #include "config.h" -#include "wtf/ASCIICType.h" - -#undef LOG #include "webkit/glue/webplugin_impl.h" // TODO(pinkerton): all of this needs to be filled in. webplugin_impl.cc has diff --git a/webkit/glue/webview.h b/webkit/glue/webview.h index 1c67c4f4..e47ad0e 100644 --- a/webkit/glue/webview.h +++ b/webkit/glue/webview.h @@ -6,7 +6,6 @@ #define WEBKIT_GLUE_WEBVIEW_H__ #include <string> -#include <vector> #include "base/basictypes.h" #include "base/ref_counted.h" @@ -196,12 +195,6 @@ class WebView : public WebWidget { virtual void DragTargetDrop( int client_x, int client_y, int screen_x, int screen_y) = 0; - // Notifies the webview that autofill suggestions are available for a node. - virtual void AutofillSuggestionsForNode( - int64 node_id, - const std::vector<std::wstring>& suggestions, - int default_suggestion_index) = 0; - private: DISALLOW_EVIL_CONSTRUCTORS(WebView); }; diff --git a/webkit/glue/webview_delegate.h b/webkit/glue/webview_delegate.h index 1ce50c5..97944dd 100644 --- a/webkit/glue/webview_delegate.h +++ b/webkit/glue/webview_delegate.h @@ -108,8 +108,7 @@ class WebViewDelegate : virtual public WebWidgetDelegate { // This method is called to create a new WebWidget to act as a popup // (like a drop-down menu). - virtual WebWidget* CreatePopupWidget(WebView* webview, - bool focus_on_show) { + virtual WebWidget* CreatePopupWidget(WebView* webview) { return NULL; } @@ -458,14 +457,6 @@ class WebViewDelegate : virtual public WebWidgetDelegate { virtual void OnUnloadListenerChanged(WebView* webview, WebFrame* webframe) { } - // Queries the browser for suggestions to be shown for the form text field - // named |field_name|. |text| is the text entered by the user so far and - // |node_id| is the id of the node of the input field. - virtual void QueryFormFieldAutofill(const std::wstring& field_name, - const std::wstring& text, - int64 node_id) { - } - // UIDelegate -------------------------------------------------------------- // Asks the browser to show a modal HTML dialog. The dialog is passed the diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc index 77a099c..827991b3 100644 --- a/webkit/glue/webview_impl.cc +++ b/webkit/glue/webview_impl.cc @@ -35,7 +35,6 @@ #include "base/compiler_specific.h" MSVC_PUSH_WARNING_LEVEL(0); -#include "CSSStyleSelector.h" #if defined(OS_WIN) #include "Cursor.h" #endif @@ -51,8 +50,6 @@ MSVC_PUSH_WARNING_LEVEL(0); #include "FrameTree.h" #include "FrameView.h" #include "GraphicsContext.h" -#include "HTMLNames.h" -#include "HTMLInputElement.h" #include "HitTestResult.h" #include "Image.h" #include "InspectorController.h" @@ -65,11 +62,9 @@ MSVC_PUSH_WARNING_LEVEL(0); #include "PlatformMouseEvent.h" #include "PlatformWheelEvent.h" #include "PluginInfoStore.h" -#include "PopupMenuClient.h" #if defined(OS_WIN) #include "RenderThemeWin.h" #endif -#include "RenderView.h" #include "ResourceHandle.h" #include "SelectionController.h" #include "Settings.h" @@ -100,7 +95,6 @@ MSVC_POP_WARNING(); #include "webkit/glue/webview_delegate.h" #include "webkit/glue/webview_impl.h" #include "webkit/glue/webwidget_impl.h" -#include "webkit/port/platform/chromium/PopupMenuChromium.h" #include "webkit/port/platform/graphics/PlatformContextSkia.h" // Get rid of WTF's pow define so we can use std::pow. @@ -122,126 +116,6 @@ static const double kMaxTextSizeMultiplier = 3.0; static const WebCore::DragOperation kDropTargetOperation = static_cast<WebCore::DragOperation>(DragOperationCopy | DragOperationLink); -// AutocompletePopupMenuClient -class AutocompletePopupMenuClient - : public RefCounted<AutocompletePopupMenuClient>, - public WebCore::PopupMenuClient { - public: - AutocompletePopupMenuClient(WebViewImpl* webview, - WebCore::HTMLInputElement* text_field, - const std::vector<std::wstring>& suggestions, - int default_suggestion_index) - : text_field_(text_field), - selected_index_(default_suggestion_index), - webview_(webview) { - for (std::vector<std::wstring>::const_iterator iter = suggestions.begin(); - iter != suggestions.end(); ++iter) { - suggestions_.push_back(webkit_glue::StdWStringToString(*iter)); - } - } - virtual ~AutocompletePopupMenuClient() { - } - - virtual void valueChanged(unsigned listIndex, bool fireEvents = true) { - text_field_->setValue(suggestions_[listIndex]); - } - - virtual WebCore::String itemText(unsigned list_index) const { - return suggestions_[list_index]; - } - - virtual bool itemIsEnabled(unsigned listIndex) const { - return true; - } - - virtual PopupMenuStyle itemStyle(unsigned listIndex) const { - return menuStyle(); - } - - virtual PopupMenuStyle menuStyle() const { - RenderStyle* style = text_field_->renderStyle() ? - text_field_->renderStyle() : - text_field_->computedStyle(); - return PopupMenuStyle(style->color(), Color::white, style->font(), - style->visibility() == VISIBLE); - } - - virtual int clientInsetLeft() const { - return 0; - } - virtual int clientInsetRight() const { - return 0; - } - virtual int clientPaddingLeft() const { -#if defined(OS_WIN) - return theme()->popupInternalPaddingLeft(text_field_->computedStyle()); -#else - NOTIMPLEMENTED(); - return 0; -#endif - } - virtual int clientPaddingRight() const { -#if defined(OS_WIN) - return theme()->popupInternalPaddingRight(text_field_->computedStyle()); -#else - NOTIMPLEMENTED(); - return 0; -#endif - } - virtual int listSize() const { - return suggestions_.size(); - } - virtual int selectedIndex() const { - return selected_index_; - } - virtual void hidePopup() { - webview_->HideAutoCompletePopup(); - } - virtual bool itemIsSeparator(unsigned listIndex) const { - return false; - } - virtual bool itemIsLabel(unsigned listIndex) const { - return false; - } - virtual bool itemIsSelected(unsigned listIndex) const { - return false; - } - virtual bool shouldPopOver() const { - return false; - } - virtual bool valueShouldChangeOnHotTrack() const { - return false; - } - - virtual FontSelector* fontSelector() const { - return text_field_->document()->styleSelector()->fontSelector(); - } - - virtual void setTextFromItem(unsigned listIndex) { - text_field_->setValue(suggestions_[listIndex]); - } - - virtual HostWindow* hostWindow() const { - return text_field_->document()->view()->hostWindow(); - } - - virtual PassRefPtr<Scrollbar> createScrollbar( - ScrollbarClient* client, - ScrollbarOrientation orientation, - ScrollbarControlSize size) { - RefPtr<Scrollbar> widget = Scrollbar::createNativeScrollbar(client, - orientation, - size); - return widget.release(); - } - - private: - RefPtr<WebCore::HTMLInputElement> text_field_; - std::vector<WebCore::String> suggestions_; - int selected_index_; - WebViewImpl* webview_; -}; - // WebView ---------------------------------------------------------------- /*static*/ @@ -419,18 +293,6 @@ bool WebViewImpl::KeyEvent(const WebKeyboardEvent& event) { // event. suppress_next_keypress_event_ = false; - // Give autocomplete a chance to consume the key events it is interested in. - if (autocomplete_popup_ && - autocomplete_popup_->isInterestedInEventForKey(event.key_code)) { - if (autocomplete_popup_->handleKeyEvent(MakePlatformKeyboardEvent(event))) - return true; - return false; - } - - // A new key being pressed should hide the popup. - if (event.type == WebInputEvent::KEY_DOWN) - HideAutoCompletePopup(); - Frame* frame = GetFocusedWebCoreFrame(); if (!frame) return false; @@ -853,6 +715,7 @@ bool WebViewImpl::HandleInputEvent(const WebInputEvent* input_event) { // we're done. if (doing_drag_and_drop_) return true; + // TODO(eseidel): Remove g_current_input_event. // This only exists to allow ChromeClient::show() to know which mouse button // triggered a window.open event. @@ -920,14 +783,6 @@ void WebViewImpl::SetBackForwardListSize(int size) { void WebViewImpl::SetFocus(bool enable) { if (enable) { - // Hide the popup menu if any. - // TODO(jcampan): bug #3844: we should do that when we lose focus. The - // reason we are not doing it is because when clicking on the autofill - // popup, the page first loses focus before the mouse click is sent to the - // popup. So if we close when the focus is lost, the mouse click does not - // do anything. - HideAutoCompletePopup(); - // Getting the focused frame will have the side-effect of setting the main // frame as the focused frame if it is not already focused. Otherwise, if // there is already a focused frame, then this does nothing. @@ -949,6 +804,8 @@ void WebViewImpl::SetFocus(bool enable) { // updated below. ReleaseFocusReferences(); + // Clear focus on the currently focused frame if any. + if (!main_frame_) return; @@ -1162,8 +1019,7 @@ void WebViewImpl::SetInitialFocus(bool reverse) { // We have to set the key type explicitly to avoid an assert in the // KeyboardEvent constructor. platform_event.SetKeyType(PlatformKeyboardEvent::RawKeyDown); - RefPtr<KeyboardEvent> webkit_event = KeyboardEvent::create(platform_event, - NULL); + RefPtr<KeyboardEvent> webkit_event = KeyboardEvent::create(platform_event, NULL); page()->focusController()->setInitialFocus( reverse ? WebCore::FocusDirectionBackward : WebCore::FocusDirectionForward, @@ -1476,59 +1332,6 @@ SearchableFormData* WebViewImpl::CreateSearchableFormDataForFocusedNode() { return NULL; } -void WebViewImpl::AutofillSuggestionsForNode( - int64 node_id, - const std::vector<std::wstring>& suggestions, - int default_suggestion_index) { - if (!main_frame_ || suggestions.empty()) - return; - - DCHECK(default_suggestion_index < static_cast<int>(suggestions.size())); - - Frame* frame = main_frame_->frame(); - if (!frame) - return; - - if (RefPtr<Frame> focused = - frame->page()->focusController()->focusedFrame()) { - RefPtr<Document> document = focused->document(); - if (!document.get()) - return; - - RefPtr<Node> focused_node = document->focusedNode(); - // If the node for which we queried the autofill suggestions is not the - // focused node, then we have nothing to do. - // TODO(jcampan): also check the carret is at the end and that the text has - // not changed. - if (!focused_node.get() || - reinterpret_cast<int64>(focused_node.get()) != node_id) - return; - - if (!focused_node->hasTagName(WebCore::HTMLNames::inputTag)) { - NOTREACHED(); - return; - } - - WebCore::HTMLInputElement* input_elem = - static_cast<WebCore::HTMLInputElement*>(focused_node.get()); - // Hide any current autocomplete popup. - HideAutoCompletePopup(); - - if (suggestions.size() > 0) { - autocomplete_popup_client_ = - adoptRef(new AutocompletePopupMenuClient(this, input_elem, - suggestions, - default_suggestion_index)); - // Autocomplete popup does not get focused. We need the page to still - // have focus so the user can keep typing when the popup is showing. - autocomplete_popup_ = - WebCore::PopupContainer::create(autocomplete_popup_client_.get(), - false); - autocomplete_popup_->show(focused_node->getRect(), frame->view(), 0); - } - } -} - void WebViewImpl::DidCommitLoad(bool* is_new_navigation) { if (is_new_navigation) *is_new_navigation = observed_new_navigation_; @@ -1677,11 +1480,3 @@ void WebViewImpl::DeleteImageResourceFetcher(ImageResourceFetcher* fetcher) { // deletion. MessageLoop::current()->DeleteSoon(FROM_HERE, fetcher); } - -void WebViewImpl::HideAutoCompletePopup() { - if (autocomplete_popup_) { - autocomplete_popup_->hidePopup(); - autocomplete_popup_.clear(); - autocomplete_popup_client_.clear(); - } -} diff --git a/webkit/glue/webview_impl.h b/webkit/glue/webview_impl.h index 83cddebd..da0d533 100644 --- a/webkit/glue/webview_impl.h +++ b/webkit/glue/webview_impl.h @@ -27,12 +27,10 @@ class HistoryItem; class KeyboardEvent; class Page; class PlatformKeyboardEvent; -class PopupContainer; class Range; class Widget; } -class AutocompletePopupMenuClient; class ImageResourceFetcher; class SearchableFormData; struct WebDropData; @@ -100,10 +98,6 @@ class WebViewImpl : public WebView, public WebCore::BackForwardListClient { virtual void DragTargetDragLeave(); virtual void DragTargetDrop( int client_x, int client_y, int screen_x, int screen_y); - virtual void AutofillSuggestionsForNode( - int64 node_id, - const std::vector<std::wstring>& suggestions, - int default_suggestion_index); // WebViewImpl @@ -184,9 +178,6 @@ class WebViewImpl : public WebView, public WebCore::BackForwardListClient { bool errored, const SkBitmap& image); - // Hides the autocomplete popup if it is showing. - void HideAutoCompletePopup(); - protected: friend class WebView; // So WebView::Create can call our constructor @@ -296,13 +287,6 @@ class WebViewImpl : public WebView, public WebCore::BackForwardListClient { // Represents whether or not this object should process incoming IME events. bool ime_accept_events_; - // The currently shown autocomplete popup. - RefPtr<WebCore::PopupContainer> autocomplete_popup_; - - // The popup client of the currently shown autocomplete popup. Necessary for - // managing the life of the client. - RefPtr<AutocompletePopupMenuClient> autocomplete_popup_client_; - // HACK: current_input_event is for ChromeClientImpl::show(), until we can fix // WebKit to pass enough information up into ChromeClient::show() so we can // decide if the window.open event was caused by a middle-mouse click diff --git a/webkit/port/page/chromium/ChromeClientChromium.h b/webkit/port/page/chromium/ChromeClientChromium.h index 39d2e39..5813770 100644 --- a/webkit/port/page/chromium/ChromeClientChromium.h +++ b/webkit/port/page/chromium/ChromeClientChromium.h @@ -17,7 +17,7 @@ namespace WebCore { class IntRect; class String; class Widget; - + class ChromeClientChromium : public ChromeClient { public: // Opens the file selection dialog. @@ -26,9 +26,7 @@ namespace WebCore { // Notifies the client of a new popup widget. The client should place // and size the widget with the given bounds, relative to the screen. - virtual void popupOpened(FramelessScrollView* popupView, - const IntRect& bounds, - bool focus_on_show) = 0; + virtual void popupOpened(FramelessScrollView* popupView, const IntRect& bounds) = 0; }; } diff --git a/webkit/port/platform/chromium/PopupMenuChromium.cpp b/webkit/port/platform/chromium/PopupMenuChromium.cpp index ae9f164..d30df68 100644 --- a/webkit/port/platform/chromium/PopupMenuChromium.cpp +++ b/webkit/port/platform/chromium/PopupMenuChromium.cpp @@ -36,9 +36,9 @@ #include "ChromeClientChromium.h" #include "Document.h" #include "Font.h" +#include "Frame.h" #include "FrameView.h" #include "FontSelector.h" -#include "Frame.h" #include "FramelessScrollView.h" #include "FramelessScrollViewClient.h" #include "GraphicsContext.h" @@ -57,8 +57,6 @@ #include "Widget.h" #pragma warning(pop) -#include "webkit/port/platform/chromium/PopupMenuChromium.h" - using namespace WTF; using namespace Unicode; @@ -74,6 +72,51 @@ static const int kMaxHeight = 500; static const int kBorderSize = 1; static const TimeStamp kTypeAheadTimeoutMs = 1000; +class PopupListBox; + +// TODO(darin): Our FramelessScrollView classes need to implement HostWindow! + +// This class holds a PopupListBox. Its sole purpose is to be able to draw +// a border around its child. All its paint/event handling is just forwarded +// to the child listBox (with the appropriate transforms). +class PopupContainer : public FramelessScrollView, public RefCounted<PopupContainer> { +public: + static PassRefPtr<PopupContainer> create(PopupMenuClient* client); + + // FramelessScrollView + virtual void paint(GraphicsContext* gc, const IntRect& rect); + virtual void hide(); + virtual bool handleMouseDownEvent(const PlatformMouseEvent& event); + virtual bool handleMouseMoveEvent(const PlatformMouseEvent& event); + virtual bool handleMouseReleaseEvent(const PlatformMouseEvent& event); + virtual bool handleWheelEvent(const PlatformWheelEvent& event); + virtual bool handleKeyEvent(const PlatformKeyboardEvent& event); + + // PopupContainer methods + + // Show the popup + void showPopup(FrameView* view); + + // Hide the popup. Do not call this directly: use client->hidePopup(). + void hidePopup(); + + // Compute size of widget and children. + void layout(); + + PopupListBox* listBox() const { return m_listBox.get(); } + +private: + friend class RefCounted<PopupContainer>; + + PopupContainer(PopupMenuClient* client); + ~PopupContainer(); + + // Paint the border. + void paintBorder(GraphicsContext* gc, const IntRect& rect); + + RefPtr<PopupListBox> m_listBox; +}; + // This class uses WebCore code to paint and handle events for a drop-down list // box ("combobox" on Windows). class PopupListBox : public FramelessScrollView, public RefCounted<PopupListBox> { @@ -127,9 +170,6 @@ public: // Compute size of widget and children. void layout(); - // Returns whether the popup wants to process events for the passed key. - bool isInterestedInEventForKey(int key_code); - private: friend class PopupContainer; friend class RefCounted<PopupListBox>; @@ -287,15 +327,13 @@ static PlatformWheelEvent constructRelativeWheelEvent(const PlatformWheelEvent& // PopupContainer implementation // static -PassRefPtr<PopupContainer> PopupContainer::create(PopupMenuClient* client, - bool focusOnShow) +PassRefPtr<PopupContainer> PopupContainer::create(PopupMenuClient* client) { - return adoptRef(new PopupContainer(client, focusOnShow)); + return adoptRef(new PopupContainer(client)); } -PopupContainer::PopupContainer(PopupMenuClient* client, bool focusOnShow) - : m_listBox(new PopupListBox(client)), - m_focusOnShow(focusOnShow) +PopupContainer::PopupContainer(PopupMenuClient* client) + : m_listBox(new PopupListBox(client)) { // FrameViews are created with a refcount of 1 so it needs releasing after we // assign it to a RefPtr. @@ -329,7 +367,7 @@ void PopupContainer::showPopup(FrameView* view) if (widgetRect.bottom() > static_cast<int>(screen.bottom())) widgetRect.move(0, -(widgetRect.height() + selectHeight)); - chromeClient->popupOpened(this, widgetRect, m_focusOnShow); + chromeClient->popupOpened(this, widgetRect); } // Must get called after we have a client and containingWindow. @@ -436,33 +474,6 @@ void PopupContainer::paintBorder(GraphicsContext* gc, const IntRect& rect) gc->drawRect(IntRect(tx + width() - kBorderSize, ty, kBorderSize, height())); } -bool PopupContainer::isInterestedInEventForKey(int key_code) { - return m_listBox->isInterestedInEventForKey(key_code); -} - -void PopupContainer::show(const IntRect& r, FrameView* v, int index) { - // The rect is the size of the select box. It's usually larger than we need. - // subtract border size so that usually the container will be displayed - // exactly the same width as the select box. - listBox()->setBaseWidth(max(r.width() - kBorderSize * 2, 0)); - - listBox()->updateFromElement(); - - // We set the selected item in updateFromElement(), and disregard the - // index passed into this function (same as Webkit's PopupMenuWin.cpp) - // TODO(ericroman): make sure this is correct, and add an assertion. - // DCHECK(popupWindow(popup)->listBox()->selectedIndex() == index); - - // Convert point to main window coords. - IntPoint location = v->contentsToWindow(r.location()); - - // Move it below the select widget. - location.move(0, r.height()); - - IntRect popupRect(location, r.size()); - setFrameRect(popupRect); - showPopup(v); -} /////////////////////////////////////////////////////////////////////////////// // PopupListBox implementation @@ -537,23 +548,6 @@ bool PopupListBox::handleWheelEvent(const PlatformWheelEvent& event) return true; } -// Should be kept in sync with handleKeyEvent(). -bool PopupListBox::isInterestedInEventForKey(int key_code) { - switch (key_code) { - case VKEY_ESCAPE: - case VKEY_RETURN: - case VKEY_UP: - case VKEY_DOWN: - case VKEY_PRIOR: - case VKEY_NEXT: - case VKEY_HOME: - case VKEY_END: - return true; - default: - return false; - } -} - bool PopupListBox::handleKeyEvent(const PlatformKeyboardEvent& event) { if (event.type() == PlatformKeyboardEvent::KeyUp) @@ -1042,8 +1036,29 @@ PopupMenu::~PopupMenu() void PopupMenu::show(const IntRect& r, FrameView* v, int index) { - p.m_popup = PopupContainer::create(client(), true); - p.m_popup->show(r, v, index); + p.m_popup = PopupContainer::create(client()); + + // The rect is the size of the select box. It's usually larger than we need. + // subtract border size so that usually the container will be displayed + // exactly the same width as the select box. + p.m_popup->listBox()->setBaseWidth(max(r.width() - kBorderSize * 2, 0)); + + updateFromElement(); + + // We set the selected item in updateFromElement(), and disregard the + // index passed into this function (same as Webkit's PopupMenuWin.cpp) + // TODO(ericroman): make sure this is correct, and add an assertion. + // DCHECK(popupWindow(m_popup)->listBox()->selectedIndex() == index); + + // Convert point to main window coords. + IntPoint location = v->contentsToWindow(r.location()); + + // Move it below the select widget. + location.move(0, r.height()); + + IntRect popupRect(location, r.size()); + p.m_popup->setFrameRect(popupRect); + p.m_popup->showPopup(v); } void PopupMenu::hide() diff --git a/webkit/port/platform/chromium/PopupMenuChromium.h b/webkit/port/platform/chromium/PopupMenuChromium.h index d419468..e69de29 100644 --- a/webkit/port/platform/chromium/PopupMenuChromium.h +++ b/webkit/port/platform/chromium/PopupMenuChromium.h @@ -1,82 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef PopupMenuChromium_h -#define PopupMenuChromium_h - -#pragma warning(push, 0) -#include "PopupMenuClient.h" - -#include "FramelessScrollView.h" -#include "IntRect.h" -#pragma warning(pop) - - -namespace WebCore { - -class PopupListBox; - -// TODO(darin): Our FramelessScrollView classes need to implement HostWindow! - -// This class holds a PopupListBox (see cpp file). Its sole purpose is to be -// able to draw a border around its child. All its paint/event handling is just -// forwarded to the child listBox (with the appropriate transforms). -// NOTE: this class is exposed so it can be instantiated direcly for the -// autofill popup. We cannot use the Popup class directly in that case as the -// autofill popup should not be focused when shown and we want to forward the -// key events to it (through handleKeyEvent). - -class PopupContainer : public FramelessScrollView, public RefCounted<PopupContainer> { -public: - static PassRefPtr<PopupContainer> create(PopupMenuClient* client, - bool focusOnShow); - - // Whether a key event should be sent to this popup. - virtual bool isInterestedInEventForKey(int key_code); - - // FramelessScrollView - virtual void paint(GraphicsContext* gc, const IntRect& rect); - virtual void hide(); - virtual bool handleMouseDownEvent(const PlatformMouseEvent& event); - virtual bool handleMouseMoveEvent(const PlatformMouseEvent& event); - virtual bool handleMouseReleaseEvent(const PlatformMouseEvent& event); - virtual bool handleWheelEvent(const PlatformWheelEvent& event); - virtual bool handleKeyEvent(const PlatformKeyboardEvent& event); - - // PopupContainer methods - - // Show the popup - void showPopup(FrameView* view); - - // Show the popup in the specified rect for the specified frame. - // Note: this code was somehow arbitrarily factored-out of the Popup class - // so WebViewImpl can create a PopupContainer. - void show(const IntRect& r, FrameView* v, int index); - - // Hide the popup. Do not call this directly: use client->hidePopup(). - void hidePopup(); - - // Compute size of widget and children. - void layout(); - - PopupListBox* listBox() const { return m_listBox.get(); } - -private: - friend class WTF::RefCounted<PopupContainer>; - - PopupContainer(PopupMenuClient* client, bool focusOnShow); - ~PopupContainer(); - - // Paint the border. - void paintBorder(GraphicsContext* gc, const IntRect& rect); - - RefPtr<PopupListBox> m_listBox; - - // Whether the window showing this popup should be focused when shown. - bool m_focusOnShow; -}; - -} - -#endif // PopupMenuChromium_h |