bool alexa::OnNavigateComplete2(int paneid,const wchar_t* url){ C6BeeMenuStatusBar* pSB = GetC6BeeMenuStatusBarPtr(); if (pSB==NULL){ return false; } ATL::CString myurl = url; if(myurl.Find(_T("http://"))!=0){ return false; } int cut=myurl.Find(_T("/"),8); if (cut<0){return false;} myurl.Truncate(cut); alexa_info.paneid = paneid; alexa_info.hostname = myurl; alexa_info.psb = pSB; alexa_info.tid = GetCurrentThreadId(); alexa_info.alexaptr = this; ::_beginthreadex(NULL,0,thread_getalexa, (LPVOID)&alexa::alexa_info,0,NULL); return true; }
bool CFilterElementHide::IsMatchFilterElementHide(IHTMLElement* pEl) const { HRESULT hr; if (!m_tagId.IsEmpty()) { CComBSTR id; hr = pEl->get_id(&id); if ((hr != S_OK) || (id != CComBSTR(m_tagId))) { return false; } } if (!m_tagClassName.IsEmpty()) { CComBSTR classNameBSTR; hr = pEl->get_className(&classNameBSTR); if (hr == S_OK) { CString className = classNameBSTR; int start = 0; CString specificClass; bool foundMatch = false; while ((specificClass = className.Tokenize(L" ", start)) != L"") { // TODO: Consider case of multiple classes. (m_tagClassName can be something like "foo.bar") if (specificClass == m_tagClassName) { foundMatch = true; } } if (!foundMatch) { return false; } } } if (!m_tag.IsEmpty()) { CComBSTR tagName; hr = pEl->get_tagName(&tagName); tagName.ToLower(); if ((hr != S_OK) || (tagName != CComBSTR(m_tag))) { return false; } } // Check attributes for (std::vector<CFilterElementHideAttrSelector>::const_iterator attrIt = m_attributeSelectors.begin(); attrIt != m_attributeSelectors.end(); ++ attrIt) { ATL::CString value; bool attrFound = false; if (attrIt->m_type == CFilterElementHideAttrType::STYLE) { CComPtr<IHTMLStyle> pStyle; if (SUCCEEDED(pEl->get_style(&pStyle)) && pStyle) { CComBSTR bstrStyle; if (SUCCEEDED(pStyle->get_cssText(&bstrStyle)) && bstrStyle) { value = bstrStyle; value.MakeLower(); attrFound = true; } } } else if (attrIt->m_type == CFilterElementHideAttrType::CLASS) { CComBSTR bstrClassNames; if (SUCCEEDED(pEl->get_className(&bstrClassNames)) && bstrClassNames) { value = bstrClassNames; attrFound = true; } } else if (attrIt->m_type == CFilterElementHideAttrType::ID) { CComBSTR bstrId; if (SUCCEEDED(pEl->get_id(&bstrId)) && bstrId) { value = bstrId; attrFound = true; } } else { auto attributeValue = GetHtmlElementAttribute(*pEl, attrIt->m_bstrAttr); if (attrFound = attributeValue.isAttributeFound) { value = ToCString(attributeValue.attributeValue); } } if (attrFound) { if (attrIt->m_pos == CFilterElementHideAttrPos::EXACT) { // TODO: IE rearranges the style attribute completely. Figure out if anything can be done about it. if (value != attrIt->m_value) return false; } else if (attrIt->m_pos == CFilterElementHideAttrPos::STARTING) { if (value.Left(attrIt->m_value.GetLength()) != attrIt->m_value) return false; } else if (attrIt->m_pos == CFilterElementHideAttrPos::ENDING) { if (value.Right(attrIt->m_value.GetLength()) != attrIt->m_value) return false; } else if (attrIt->m_pos == CFilterElementHideAttrPos::ANYWHERE) { if (value.Find(attrIt->m_value) < 0) return false; } else if (attrIt->m_value.IsEmpty()) { return true; } } else { return false; } } if (m_predecessor) { CComPtr<IHTMLElement> pDomPredecessor; HRESULT hr = S_FALSE; switch (m_predecessor->m_type) { case ETraverserComplexType::TRAVERSER_TYPE_PARENT: hr = pEl->get_parentElement(&pDomPredecessor); break; case ETraverserComplexType::TRAVERSER_TYPE_IMMEDIATE: hr = S_FALSE; CComQIPtr<IHTMLDOMNode> pPrevSiblingNode = pEl; long type = 0; while (pPrevSiblingNode && type != 1) { IHTMLDOMNode* tmpNode; pPrevSiblingNode->get_previousSibling(&tmpNode); pPrevSiblingNode.Attach(tmpNode); if (pPrevSiblingNode) { hr = pPrevSiblingNode->get_nodeType(&type); if (hr != S_OK) pPrevSiblingNode.Release(); } } if (pPrevSiblingNode) hr = pPrevSiblingNode.QueryInterface(&pDomPredecessor); else return false; break; } if (hr != S_OK) return false; return m_predecessor->IsMatchFilterElementHide(pDomPredecessor); } return true; }