// missingImage, textAreaResizeCorner PassRefPtr<Image> Image::loadPlatformResource(const char *name) { android::AssetManager* am = globalAssetManager(); SkString path("webkit/"); path.append(name); path.append(".png"); android::Asset* a = am->open(path.c_str(), android::Asset::ACCESS_BUFFER); if (a == NULL) { SkDebugf("---------------- failed to open image asset %s\n", name); return NULL; } SkAutoTDelete<android::Asset> ad(a); SkBitmap bm; if (SkImageDecoder::DecodeMemory(a->getBuffer(false), a->getLength(), &bm)) { SkBitmapRef* ref = new SkBitmapRef(bm); // create will call ref(), so we need aur() to release ours upon return SkAutoUnref aur(ref); return BitmapImage::create(ref, 0); } return Image::nullImage(); }
void WebRequest::handleBrowserURL(GURL url) { std::string data("data:text/html;charset=utf-8,"); if (url.spec() == "browser:incognito") { AssetManager* assetManager = globalAssetManager(); Asset* asset = assetManager->open("webkit/incognito_mode_start_page.html", Asset::ACCESS_BUFFER); if (asset) { data.append((const char*)asset->getBuffer(false), asset->getLength()); delete asset; } } GURL dataURL(data.c_str()); handleDataURL(dataURL); }
void RenderSkinMediaButton::Decode() { String drawableDirectory = RenderSkinAndroid::DrawableDirectory(); gDecoded = true; gDecodingFailed = false; android::AssetManager* am = globalAssetManager(); for (size_t i = 0; i < sizeof(gFiles)/sizeof(gFiles[0]); i++) { String path = drawableDirectory + gFiles[i].name; if (!RenderSkinAndroid::DecodeBitmap(am, path.utf8().data(), &gButton[i])) { gDecodingFailed = true; ALOGD("RenderSkinButton::Init: button assets failed to decode\n\tBrowser buttons will not draw"); break; } } }
void RenderSkinCombo::Decode() { if (isDecodingAttempted) return; isDecodingAttempted = true; isDecoded = false; android::AssetManager* am = globalAssetManager(); String drawableDirectory = RenderSkinAndroid::DrawableDirectory(); Resolution res = RenderSkinAndroid::DrawableResolution(); isDecoded = RenderSkinAndroid::DecodeBitmap(am, (drawableDirectory + "combobox_nohighlight.png").utf8().data(), &bitmaps[kNormal][FullAsset]); isDecoded &= RenderSkinAndroid::DecodeBitmap(am, (drawableDirectory + "combobox_disabled.png").utf8().data(), &bitmaps[kDisabled][FullAsset]); int width = bitmaps[kNormal][FullAsset].width(); int height = bitmaps[kNormal][FullAsset].height(); SkIRect subset; subset.set(width - arrowWidth[res], 0, width, height); bitmaps[kNormal][FullAsset].extractSubset(&bitmaps[kNormal][NoBorder], subset); bitmaps[kDisabled][FullAsset].extractSubset(&bitmaps[kDisabled][NoBorder], subset); // Calculate 9 patch margins. SkIRect fullAssetMargin; fullAssetMargin.fLeft = stretchMargin[res]; fullAssetMargin.fTop = stretchTop[res]; fullAssetMargin.fRight = arrowMargin[res] + stretchMargin[res]; fullAssetMargin.fBottom = stretchMargin[res]; SkIRect noBorderMargin; noBorderMargin.fLeft = 0; noBorderMargin.fTop = stretchTop[res]; noBorderMargin.fRight = 0; noBorderMargin.fBottom = stretchMargin[res]; margin[FullAsset] = fullAssetMargin; margin[NoBorder] = noBorderMargin; }
void FrameLoaderClientAndroid::dispatchDidFailProvisionalLoad(const ResourceError& error) { ASSERT(m_frame); // Ignore ErrorInterrupted since it is due to a policy interruption. This // is caused by a decision to download the main resource rather than // display it. if (error.errorCode() == InternalErrorInterrupted || error.errorCode() == InternalErrorCancelled) { // If we decided to download the main resource or if the user cancelled // it, make sure we report that the load is done. didFinishLoad(); return; } AssetManager* am = globalAssetManager(); // Check to see if the error code was not generated internally WebCore::PlatformBridge::rawResId id = WebCore::PlatformBridge::NoDomain; if ((error.errorCode() == ErrorFile || error.errorCode() == ErrorFileNotFound) && (!error.localizedDescription().isEmpty())) { id = WebCore::PlatformBridge::LoadError; } String filename = m_webFrame->getRawResourceFilename(id); if (filename.isEmpty()) return; // Grab the error page from the asset manager Asset* a = am->openNonAsset( filename.utf8().data(), Asset::ACCESS_BUFFER); if (!a) return; // Take the failing url and encode html entities so javascript urls are not // executed. CString failingUrl = error.failingURL().utf8(); WTF::Vector<char> url; int len = failingUrl.length(); const char* data = failingUrl.data(); for (int i = 0; i < len; i++) { char c = data[i]; if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) url.append(c); else { char buf[16]; int res = sprintf(buf, "&#%d;", c); buf[res] = 0; url.append(buf, res); } } // Replace all occurances of %s with the failing url. String s = UTF8Encoding().decode((const char*)a->getBuffer(false), a->getLength()); // samsung shkim // \frameworks\base\core\res\res\raw-XX\nodomain.html or loaderror.html // These error pages does not have <viewport> tag, it is loaded as low zoom scale if( s.contains( "viewport" ) == false ) s = s.replace( "<head>", "<head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\"/>" ); s = s.replace("%s", String(url.data(), url.size())); // Replace all occurances of %e with the error text s = s.replace("%e", error.localizedDescription()); // Create the request and the substitute data and tell the FrameLoader to // load with the replacement data. // use KURL(const char*) as KURL(const String& url) can trigger ASSERT for // invalidate URL string. loadDataIntoFrame(m_frame, KURL(ParsedURLString, data), error.failingURL(), s); // Delete the asset. delete a; }