第43回 プライバシーレポートを表示する (タブブラウザーを作る)

tabbrowser177.gif
前回はステータスバーにいくつかのペインを作った。今回はそのペインのダブルクリックで開いているページのプライバシーレポートを表示する。

「プライバシーレポート」はInternet Explrer 6から追加された機能で、そのページに含まれるクッキーなどの情報が表示される。

まず内部で利用するための独自メッセージを定義する。次回のことも考え今回はプライバシーレポートに加え、セキュリティレポート用のメッセージも追加した。
#define	WM_DNP_CHANGEFOCUS		(WM_APP + 1)
#define	WM_DNP_CREATENEWTAB		(WM_APP + 2)
#define	WM_DNP_CHANGEADDRESS	(WM_APP + 3)
#define	WM_DNP_SCRIPTERROR		(WM_APP + 6)
#define	WM_DNP_SHOWSCRIPTERROR	(WM_APP + 7)
#define	WM_DNP_SHOWPRIVACYREPORT	(WM_APP + 8)		//■追加
#define	WM_DNP_SHOWPSECURITYREPORT	(WM_APP + 9)		//■追加

tabbrowser178.gif CIELikeStatusbarのダブルクリック処理部分を変更する。switchによる分岐にし、先ほど用意した独自メッセージをビューウインドウに飛ばすように設定する。
	//ステータスバーのダブルクリック処理
	LRESULT OnLButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		int		i;
		RECT	rect;
		BOOL	ret;
		POINT	pt;

		CStatusBarCtrl	wndStatusBar = m_hWnd;

		if(_hWndNotify == NULL || ::IsWindow(_hWndNotify) == FALSE)
			return	0;		//通知先が死んでいたらこれ以降処理しない

		::GetCursorPos(&pt);
		ScreenToClient(&pt);

		i = 0;
		while(1)
		{
			ret = wndStatusBar.GetRect(i,&rect);
			if(ret == FALSE)
				break;

			if(::PtInRect(&rect,pt))
			{
				//i番目のペインがダブルクリックされた

				//■処理内容変更。switch化した
				switch(i)
				{
				case	PAIN_DEFAULT:
					::SendMessage(_hWndNotify,WM_DNP_SHOWSCRIPTERROR,NULL,NULL);
					break;

				case	PAIN_PRIVACY_REPORT:
					::SendMessage(_hWndNotify,WM_DNP_SHOWPRIVACYREPORT,NULL,NULL);
					break;

				case	PAIN_SECURITY_REPORT:
					::SendMessage(_hWndNotify,WM_DNP_SHOWPSECURITYREPORT,NULL,NULL);
					break;

				case	PAIN_PROGRESS:
				case	PAIN_RESERVED:
				case	PAIN_POPUP:
				case	PAIN_ADDON:
				case	PAIN_SECURITY:
				case	PAIN_ZONE:
				case	PAIN_BLOCKED:
				case	PAIN_ZOOM:
					break;
				}

				break;
			}

			i++;
		}

		return	0;
	}

tabbrowser179.gif そしてビューウインドウ内でメッセージを受け取り、レポートを表示する関数が実行されるようにする。
	BEGIN_MSG_MAP(CTabBrowser100View)
		MESSAGE_HANDLER(WM_DNP_SCRIPTERROR, OnDnpScriptError)
		MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
		MESSAGE_HANDLER(WM_DNP_SHOWSCRIPTERROR, OnShowScriptError)
		MESSAGE_HANDLER(WM_DNP_SHOWPRIVACYREPORT, OnShowPrivacyReport)		//■追加
		MESSAGE_HANDLER(WM_DNP_SHOWPSECURITYREPORT, OnShowSecurityReport)	//■追加
	END_MSG_MAP()


private:


	//■追加
	LRESULT OnShowPrivacyReport(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		ShowPrivacyReport(m_hWnd);
		return	0;
	}

	//■追加
	LRESULT OnShowSecurityReport(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		ShowSecurityReport(m_hWnd);
		return	0;
	}

tabbrowser180.gif
CIEUtilityの中にレポートを表示する関数を追加する。

プライバシーレポートの表示にはshdocvw.dllからエクスポートされるDoPrivavcyDlgという関数を使う。引数にIEnumPrivacyRecordsとURLが必要なのでそれをIWebBrowser2から取得し渡している。
	//■追加
	//IE6以上で実装されているプライバシーレポートの表示
	bool	ShowPrivacyReport(HWND hWnd)
	{
		HRESULT		hr;
		CComBSTR	bstr;
		HINSTANCE	hDLL;
		CComPtr<IServiceProvider>		pIServiceProvider;
		CComPtr<IEnumPrivacyRecords>	pIEnumPrivacyRecords;
		HRESULT (WINAPI* pfnDoPrivacyDlg)(HWND,LPOLESTR,IEnumPrivacyRecords*,BOOL) = NULL;

		if(_pIWebBrowser2 == NULL)
			return	false;

		//IEnumPrivacyRecords取得
		_pIWebBrowser2->QueryInterface(&pIServiceProvider);
		if(pIServiceProvider)
			pIServiceProvider->QueryService(__uuidof(IEnumPrivacyRecords),IID_IEnumPrivacyRecords,(void**)&pIEnumPrivacyRecords);
		if(pIEnumPrivacyRecords == NULL)
			return	false;

		//URL取得
		hr = _pIWebBrowser2->get_LocationURL(&bstr);
		if(FAILED(hr))
			return	false;

		hDLL = ::LoadLibrary(_T("shdocvw.dll"));
		if(hDLL == NULL)
			return	false;

		//DoPrivacyDlg取得
		(FARPROC&)pfnDoPrivacyDlg = ::GetProcAddress(hDLL,"DoPrivacyDlg");
		if(pfnDoPrivacyDlg == NULL)
		{
			::FreeLibrary(hDLL);
			return	false;
		}

		hr = pfnDoPrivacyDlg(hWnd,bstr,pIEnumPrivacyRecords,FALSE);

		::FreeLibrary(hDLL);

		return	SUCCEEDED(hr) ? true : false;
	}

	//■追加
	bool	ShowSecurityReport(HWND hWnd)
	{
		return	true;
	}

tabbrowser181.gif
これでステータスバーのプライバシーレポート用のペインをダブルクリックすることでプライバシーレポートが表示されるようになった。

次回はセキュリティレポートが表示されるようにする。

プロジェクトファイルをダウンロード


カテゴリー「タブブラウザーを作る」 のエントリー