This method is worth having as general: Package::Extract()
and then in xpk case we can have

XPKPackage::Extract() {
  if (is_extracted_) { // OK, this branch is duplicated but we can afford it
    *target_path = temp_dir_.path();
    return true;
  }

  if (!IsValid()) {
    LOG(ERROR) << "XPK/WGT file is not valid.";
    return false;
  }
 return Package::Extract();
}
and WGTPackage just uses the generic method. wdyt?