TEST_F(ExternalPopupMenuTest, PopupAccountsForVisualViewportOffset) { registerMockedURLLoad("select_mid_screen.html"); loadFrame("select_mid_screen.html"); webView()->resize(WebSize(100, 100)); webView()->updateAllLifecyclePhases(); HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); LayoutMenuList* menuList = toLayoutMenuList(select->layoutObject()); ASSERT_TRUE(menuList); VisualViewport& visualViewport = webView()->page()->frameHost().visualViewport(); IntRect rectInDocument = menuList->absoluteBoundingBoxRect(); webView()->setPageScaleFactor(2); IntPoint scrollDelta(20, 30); visualViewport.move(scrollDelta); select->showPopup(); EXPECT_EQ(rectInDocument.x() - scrollDelta.x(), client().shownBounds().x); EXPECT_EQ(rectInDocument.y() - scrollDelta.y(), client().shownBounds().y); }
// Returns true if |node| is an <option> element and its parent <select> // is a menu list (not a list box). static bool isMenuListOption(Node* node) { if (!isHTMLOptionElement(node)) return false; HTMLSelectElement* select = toHTMLOptionElement(node)->ownerSelectElement(); if (!select) return false; LayoutObject* layoutObject = select->layoutObject(); return layoutObject && layoutObject->isMenuList(); }
TEST_F(ExternalPopupMenuTest, DidAcceptIndicesClearSelect) { registerMockedURLLoad("select.html"); loadFrame("select.html"); HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); LayoutMenuList* menuList = toLayoutMenuList(select->layoutObject()); ASSERT_TRUE(menuList); select->showPopup(); ASSERT_TRUE(select->popupIsVisible()); WebExternalPopupMenuClient* client = static_cast<ExternalPopupMenu*>(select->popup()); WebVector<int> indices; client->didAcceptIndices(indices); EXPECT_FALSE(select->popupIsVisible()); EXPECT_EQ(-1, select->selectedIndex()); }
TEST_F(ExternalPopupMenuTest, DidAcceptIndex) { registerMockedURLLoad("select.html"); loadFrame("select.html"); HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); LayoutMenuList* menuList = toLayoutMenuList(select->layoutObject()); ASSERT_TRUE(menuList); select->showPopup(); ASSERT_TRUE(select->popupIsVisible()); WebExternalPopupMenuClient* client = static_cast<ExternalPopupMenu*>(select->popup()); client->didAcceptIndex(2); EXPECT_FALSE(select->popupIsVisible()); ASSERT_STREQ("2", menuList->text().utf8().data()); EXPECT_EQ(2, select->selectedIndex()); }