void LLFloaterWebContent::open_media(const Params& p)
{
	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
	LLViewerMedia::proxyWindowOpened(p.target(), p.id());
	mWebBrowser->setHomePageUrl(p.url, HTTP_CONTENT_TEXT_HTML);
	mWebBrowser->setTarget(p.target);
	mWebBrowser->navigateTo(p.url, HTTP_CONTENT_TEXT_HTML, p.clean_browser);
	
	set_current_url(p.url);

	getChild<LLLayoutPanel>("status_bar")->setVisible(p.show_chrome);
	getChild<LLLayoutPanel>("nav_controls")->setVisible(p.show_chrome);
	bool address_entry_enabled = p.allow_address_entry && !p.trusted_content;
    mAllowNavigation = p.allow_back_forward_navigation;
	getChildView("address")->setEnabled(address_entry_enabled);
	getChildView("popexternal")->setEnabled(address_entry_enabled);

	if (!p.show_chrome)
	{
		setResizeLimits(100, 100);
	}

	if (!p.preferred_media_size().isEmpty())
	{
		getChild<LLLayoutStack>("stack1")->updateLayout();
		LLRect browser_rect = mWebBrowser->calcScreenRect();
		LLCoordWindow window_size;
		getWindow()->getSize(&window_size);
		
		geometryChanged(browser_rect.mLeft, window_size.mY - browser_rect.mTop, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight());
	}

}
void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target)
{
	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
	mWebBrowser->setHomePageUrl(web_url, "text/html");
	mWebBrowser->setTarget(target);
	mWebBrowser->navigateTo(web_url, "text/html");
	set_current_url(web_url);
}
// virtual
void FloaterHop::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
{
	if(event == MEDIA_EVENT_LOCATION_CHANGED)
	{
		const std::string url = self->getLocation();

		set_current_url( url );
	}
	else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)
	{

	}
	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
	{

	}
	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
	{
		// The browser instance wants its window closed.
		closeFloater();
	}
	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
	{
		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
	}
	else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED )
	{

	}
	else if(event == MEDIA_EVENT_PROGRESS_UPDATED )
	{

	}
	else if(event == MEDIA_EVENT_NAME_CHANGED )
	{
		std::string page_title = self->getMediaName();
		// simulate browser behavior - title is empty, use the current URL
		if (mShowPageTitle)
		{
			if ( page_title.length() > 0 )
				setTitle( page_title );
			else
				setTitle( mCurrentURL );
		}
	}
	else if(event == MEDIA_EVENT_LINK_HOVERED )
	{

	}
}
void LLFloaterWebContent::open_media(const Params& p)
{
    // Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
    LLViewerMedia::proxyWindowOpened(p.target(), p.id());
    mWebBrowser->setHomePageUrl(p.url, p.initial_mime_type);
    mWebBrowser->setTarget(p.target);
    mWebBrowser->navigateTo(p.url, p.initial_mime_type);

    set_current_url(p.url);

    getChild<LLPanel>("status_bar")->setVisible(p.show_chrome);
    getChild<LLPanel>("nav_controls")->setVisible(p.show_chrome);
    bool address_entry_enabled = p.allow_address_entry && !p.trusted_content;
    getChildView("address")->setEnabled(address_entry_enabled);
    getChildView("popexternal")->setEnabled(address_entry_enabled);

    if (!address_entry_enabled)
    {
        mWebBrowser->setFocus(TRUE);
    }

    if (!p.show_chrome)
    {
        setResizeLimits(100, 100);
    }
    else
    {
        // Singu Note: currently only true with normal browser floater, if this changes, this workaround breaks
        setRectControl("FloaterMediaRect");
        applyRectControl();
    }

    if (!p.preferred_media_size().isEmpty())
    {
        getChild<LLLayoutStack>("stack1")->updateLayout();
        LLRect browser_rect = mWebBrowser->calcScreenRect();
        LLCoordWindow window_size;
        getWindow()->getSize(&window_size);

        geometryChanged(browser_rect.mLeft, window_size.mY - browser_rect.mTop, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight());
    }

}
void FloaterHop::open_media(const Params& p)
{
	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
	LLViewerMedia::proxyWindowOpened(p.target(), p.id());

	std::string grid = mSLURL.getGrid();
	LLSD grid_info;
	LLGridManager::getInstance()->getGridData(grid, grid_info);
	std::string url = grid_info[GRID_LOGIN_PAGE_VALUE].asString();

	mWebBrowser->setHomePageUrl(url, "text/html");
	mWebBrowser->setTarget(p.target);
	mWebBrowser->navigateTo(url, "text/html");
	
	set_current_url(url);

	getChild<LLLayoutPanel>("status_bar")->setVisible(p.show_chrome);
	getChild<LLLayoutPanel>("nav_controls")->setVisible(p.show_chrome);
	bool address_entry_enabled = p.allow_address_entry && !p.trusted_content;
	getChildView("address")->setEnabled(address_entry_enabled);
	getChildView("popexternal")->setEnabled(address_entry_enabled);

	if (!address_entry_enabled)
	{
		mWebBrowser->setFocus(TRUE);
	}

	if (!p.show_chrome)
	{
		setResizeLimits(100, 100);
	}

	if (!p.preferred_media_size().isEmpty())
	{
		LLLayoutStack::updateClass();
		LLRect browser_rect = mWebBrowser->calcScreenRect();
		LLCoordWindow window_size;
		getWindow()->getSize(&window_size);
		
		geometryChanged(browser_rect.mLeft, window_size.mY - browser_rect.mTop, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight());
	}

}
// virtual
void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
{
    if(event == MEDIA_EVENT_LOCATION_CHANGED)
    {
        const std::string url = self->getLocation();

        if ( url.length() )
            mStatusBarText->setText( url );

        set_current_url( url );
    }
    else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)
    {
        // flags are sent with this event
        mBtnBack->setEnabled( self->getHistoryBackAvailable() );
        mBtnForward->setEnabled( self->getHistoryForwardAvailable() );

        // toggle visibility of these buttons based on browser state
        mBtnReload->setVisible( false );
        mBtnStop->setVisible( true );

        // turn "on" progress bar now we're about to start loading
        mStatusBarProgress->setVisible( true );
    }
    else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
    {
        // flags are sent with this event
        mBtnBack->setEnabled( self->getHistoryBackAvailable() );
        mBtnForward->setEnabled( self->getHistoryForwardAvailable() );

        // toggle visibility of these buttons based on browser state
        mBtnReload->setVisible( true );
        mBtnStop->setVisible( false );

        // turn "off" progress bar now we're loaded
        mStatusBarProgress->setVisible( false );

        // we populate the status bar with URLs as they change so clear it now we're done
        const std::string end_str = "";
        mStatusBarText->setText( end_str );

        // decide if secure browsing icon should be displayed
        std::string prefix =  std::string("https://");
        std::string test_prefix = mCurrentURL.substr(0, prefix.length());
        LLStringUtil::toLower(test_prefix);
        if(test_prefix == prefix)
        {
            mSecureLockIcon->setVisible(true);
        }
        else
        {
            mSecureLockIcon->setVisible(false);
        }
    }
    else if(event == MEDIA_EVENT_CLOSE_REQUEST)
    {
        // The browser instance wants its window closed.
        close();
    }
    else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
    {
        geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
    }
    else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED )
    {
        const std::string text = self->getStatusText();
        if ( text.length() )
            mStatusBarText->setText( text );
    }
    else if(event == MEDIA_EVENT_PROGRESS_UPDATED )
    {
        int percent = (int)self->getProgressPercent();
        mStatusBarProgress->setPercent( percent );
    }
    else if(event == MEDIA_EVENT_NAME_CHANGED )
    {
        std::string page_title = self->getMediaName();
        // simulate browser behavior - title is empty, use the current URL
        if (mShowPageTitle)
        {
            if ( page_title.length() > 0 )
                setTitle( page_title );
            else
                setTitle( mCurrentURL );
        }
    }
    else if(event == MEDIA_EVENT_LINK_HOVERED )
    {
        const std::string link = self->getHoverLink();
        mStatusBarText->setText( link );
    }
}
// virtual
void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
{
	if(event == MEDIA_EVENT_LOCATION_CHANGED)
	{
		const std::string url = self->getLocation();

		if ( url.length() )
			mStatusBarText->setText( url );

		set_current_url( url );
	}
	else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)
	{
		// hide the media fail text and bring the web browser to the front
		mWebBrowser->setVisible( true );
		mPluginFailText->setVisible( false );
		// flags are sent with this event
		mBtnBack->setEnabled( self->getHistoryBackAvailable() );
		mBtnForward->setEnabled( self->getHistoryForwardAvailable() );

		// toggle visibility of these buttons based on browser state
		mBtnReload->setVisible( false );
		mBtnStop->setVisible( true );

		// turn "on" progress bar now we're about to start loading
		mStatusBarProgress->setVisible( true );
	}
	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
	{
		// flags are sent with this event
		mBtnBack->setEnabled( self->getHistoryBackAvailable() );
		mBtnForward->setEnabled( self->getHistoryForwardAvailable() );

		// toggle visibility of these buttons based on browser state
		mBtnReload->setVisible( true );
		mBtnStop->setVisible( false );

		// turn "off" progress bar now we're loaded
		mStatusBarProgress->setVisible( false );

		// we populate the status bar with URLs as they change so clear it now we're done
		const std::string end_str = "";
		mStatusBarText->setText( end_str );
	}
	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
	{
		// The browser instance wants its window closed.
		closeFloater();
	}
	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
	{
		if (mCurrentURL.find("facebook.com/dialog/oauth") == std::string::npos) // HACK to fix ACME-1317 - Cho
		{
		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
	}
	}
	else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED )
	{
		const std::string text = self->getStatusText();
		if ( text.length() )
			mStatusBarText->setText( text );
	}
	else if(event == MEDIA_EVENT_PROGRESS_UPDATED )
	{
		int percent = (int)self->getProgressPercent();
		mStatusBarProgress->setValue( percent );
	}
	else if(event == MEDIA_EVENT_NAME_CHANGED )
	{
		std::string page_title = self->getMediaName();
		// simulate browser behavior - title is empty, use the current URL
		if (mShowPageTitle)
		{
			if ( page_title.length() > 0 )
				setTitle( page_title );
			else
				setTitle( mCurrentURL );
		}
	}
	else if(event == MEDIA_EVENT_LINK_HOVERED )
	{
		const std::string link = self->getHoverLink();
		mStatusBarText->setText( link );
	}
}