//---------------------------------------------------------------------------- // InitializeContentScripting STDMETHODIMP CAnchoAddon::InitializeContentScripting(IWebBrowser2* pBrowser, BSTR bstrUrl, documentLoadPhase aPhase) { IF_FAILED_RET(initializeEnvironment()); // content script handling happens here // no frame handling // TODO: decide how to handle frames if (!m_pWebBrowser.IsEqualObject(pBrowser)) { return S_OK; } if (aPhase != documentLoadEnd) { return S_OK; } cleanupScripting(); // get content our API IF_FAILED_RET(m_pAddonBackground->GetContentInfo(m_InstanceID, bstrUrl, &m_pContentInfo)); CString s; s.Format(_T("Ancho content [%s] [%i]"), m_sExtensionName, m_InstanceID); IF_FAILED_RET(m_Magpie->Init((LPWSTR)(LPCWSTR)s)); // add a loader for scripts in the extension filesystem IF_FAILED_RET(m_Magpie->AddFilesystemScriptLoader((LPWSTR)(LPCWSTR)m_sExtensionPath)); // inject items: chrome, console and window with global members CComQIPtr<IWebBrowser2> pWebBrowser(pBrowser); ATLASSERT(pWebBrowser); CIDispatchHelper contentInfo(m_pContentInfo); CComVariant jsObj; IF_FAILED_RET((contentInfo.Get<CComVariant, VT_DISPATCH, IDispatch*>(L"api", jsObj))); IF_FAILED_RET(DOMWindowWrapper::createInstance(pWebBrowser, m_wrappedWindow)); m_Magpie->AddNamedItem(L"chrome", jsObj.pdispVal, SCRIPTITEM_ISVISIBLE|SCRIPTITEM_CODEONLY); m_Magpie->AddNamedItem(L"window", m_wrappedWindow, SCRIPTITEM_ISVISIBLE|SCRIPTITEM_GLOBALMEMBERS); CIDispatchHelper window = m_wrappedWindow; CComPtr<IDispatchEx> pRequest; IF_FAILED_RET(pRequest.CoCreateInstance(__uuidof(AnchoXmlHttpRequest))); IF_FAILED_RET(window.SetProperty((LPOLESTR)L"XMLHttpRequest", CComVariant(pRequest.p))); m_Magpie->AddNamedItem(L"XMLHttpRequest", pRequest, SCRIPTITEM_ISVISIBLE|SCRIPTITEM_CODEONLY); // get the name(s) of content scripts from manifest and run them in order IF_FAILED_RET((contentInfo.Get<CComVariant, VT_DISPATCH, IDispatch*>(L"scripts", jsObj))); VariantVector scripts; IF_FAILED_RET(addJSArrayToVariantVector(jsObj.pdispVal, scripts)); for(VariantVector::iterator it = scripts.begin(); it != scripts.end(); ++it) { if( it->vt == VT_BSTR ) { m_Magpie->ExecuteGlobal(it->bstrVal); } } return S_OK; }
//---------------------------------------------------------------------------- // InitializeExtensionScripting STDMETHODIMP CAnchoAddon::InitializeExtensionScripting(BSTR bstrUrl) { IF_FAILED_RET(initializeEnvironment()); cleanupScripting(); // get content our API IF_FAILED_RET(m_pAddonBackground->GetContentInfo(m_InstanceID, bstrUrl, &m_pContentInfo)); CIDispatchHelper contentInfo(m_pContentInfo); CComVariant api; IF_FAILED_RET((contentInfo.Get<CComVariant, VT_DISPATCH, IDispatch*>(L"api", api))); CIDispatchHelper script = CIDispatchHelper::GetScriptDispatch(m_pWebBrowser); IF_FAILED_RET(script.SetPropertyByRef(L"chrome", api)); CComVariant console; IF_FAILED_RET((contentInfo.Get<CComVariant, VT_DISPATCH, IDispatch*>(L"console", console))); IF_FAILED_RET(script.SetPropertyByRef(L"console", console)); return S_OK; }
void QDropboxFileInfo::dataFromJson() { if(!isValid()) return; _size = getString("size"); _revision = getUInt("revision"); _thumbExists = getBool("thumb_exists"); _bytes = getUInt("bytes"); _icon = getString("icon"); _root = getString("root"); _path = getString("path"); _isDir = getBool("is_dir"); _mimeType = getString("mime_type"); _isDeleted = getBool("is_deleted"); _revisionHash = getString("rev"); _modified = getTimestamp("modified"); _clientModified = getTimestamp("client_modified"); // create content list if(_isDir) { qDebug() << "fileinfo: generating contents list"; _content = new QList<QDropboxFileInfo>(); QStringList contentsArray = getArray("contents"); for(qint32 i = 0; i<contentsArray.size(); ++i) { QDropboxFileInfo contentInfo(contentsArray.at(i)); if(!contentInfo.isValid()) continue; _content->append(contentInfo); } } qDebug() << "fertig"; return; }